[3553] Re: 8bitのbmp画像ファイルがただしく読めない / Administrator
>8bitのbmp画像ファイルがただしく読めなてないようです。
>3D画面にはきちんと表示されるのですがマテリアルの表示ボタンを押したときや
>MQ_LoadImageで読み込んだときに正しく読み込めていないようです。
表示は正しく行われていないようですが、読み込み自体には問題ないので、
MQ_LoadImageも正しく動作していると思います。
もう一度ご確認いただけますか。
2013-09-19 12:43
[3554] Re: Re: 8bitのbmp画像ファイルがただしく読めない / sio29
返信ありがとうございます。
画像自体は読み込めていますが、RGBQUADのrgbReservedが0x00が入っているようです。
PNGなどでrgbReservedをアルファとして使用するならば、BMPの場合はrgbReservedを0xffで埋めていただくか、
MQ_LoadImageでアルファ使用しているかがわかるフラグを返していただけるとありがたいです。
2013-09-19 16:14
[3555] Re: Re: Re: 8bitのbmp画像ファイルがただしく読めない / sio29
あと環境設定のマッピング画像フォルダに空白を指定しておくと、
マテリアルのマッピングで参照でファイルを選択しても反映されないようです。
ただし直接ファイル名を指定する読めるようです
2013-09-19 16:39
[3558] Re: Re: Re: 8bitのbmp画像ファイルがただしく読めない / Administrator
>画像自体は読み込めていますが、RGBQUADのrgbReservedが0x00が入っているようです。
Windows APIの仕様としてRGBQUADのrgbReservedは0を入れることになっており、
アルファ付きのパレットを扱うことができません。
この仕様の制約のため、PNGのアルファパレット付きデータもわざわざ32bitに展開して読み込んでいます。
とはいえ時代遅れのDIBの仕様に合わせるより、もっと柔軟性の高いフォーマットを提供する必要はあるとは思います。
2013-09-19 21:54
[3559] Re: Re: Re: Re: 8bitのbmp画像ファイルがただしく読めない / sio29
>Windows APIの仕様としてRGBQUADのrgbReservedは0を入れることになっており、
>アルファ付きのパレットを扱うことができません。
んー、それを言い出したら32bit時もrgbReseverdは0だと思いますが…
>PNGのアルファパレット付きデータもわざわざ32bitに展開して読み込んでいます。
それは知りませんでした。
では8bit以下ではrgbReservedは0で、32bit時はアルファとして扱うでいいんですね?
2013-09-19 23:15
[3564] Re: Re: Re: Re: Re: 8bitのbmp画像ファイルがただしく読めない / Administrator
>>Windows APIの仕様としてRGBQUADのrgbReservedは0を入れることになっており、
>>アルファ付きのパレットを扱うことができません。
>んー、それを言い出したら32bit時もrgbReseverdは0だと思いますが…
??32bit時はRGBQUAD型のパレットは取り扱いません。
BITMAPINFOHEADERの後ろの領域は未アロケートなので、そこにアクセスするとアクセス違反が発生します。
2013-09-20 10:54
[3565] Re: Re: Re: Re: Re: Re: 8bitのbmp画像ファイルがただしく読めない / sio29
パレットではビットマップ本体の話です
2013-09-20 12:03
[3567] Re: Re: Re: Re: Re: Re: Re: 8bitのbmp画像ファイルがただしく読めない / sio29
>パレットではビットマップ本体の話です
失礼、書き間違えました。
パレットではなく、ビットマップ(画像データ)本体の話です。
2013-09-20 12:34
[3569] Re: Re: Re: Re: Re: Re: Re: Re: 8bitのbmp画像ファイルがただしく読めない / Administrator
>パレットではなく、ビットマップ(画像データ)本体の話です。
ビットマップはRGBQUAD型ではなく単なるバイトデータ配列だと思います。
英語版のMSDNのRGBUADのページにはrgbReseverdは0を格納すると明示されますが、
一方BITMAPINFOHEADERのページには32bit画像データのうち最上位のバイトは未使用であって0である指示はなく
さらにV4やV5のヘッダでは明示的にαチャネルとして定義することもできます。
MetasequoiaではV4/V5のヘッダは使用していませんが、暗黙的に32bit画像の最上位バイトをαとして使用しています。
2013-09-20 14:44
返信ありがとうごさいます。
>ビットマップはRGBQUAD型ではなく単なるバイトデータ配列だと思います。
入っているデータは同じなのでわかりやすく説明するためにRGBQUADに置き換えて説明しましたつもりでしたが、
混乱させて申し訳ありませんでした。
>MetasequoiaではV4/V5のヘッダは使用していませんが、暗黙的に32bit画像の最上位バイトをαとして使用しています。
では8bit以下ではrgbReservedは0で、32bit時の「上位8bit」はアルファとして扱う方向性で対応させていただきます。
あとできれば「暗黙的」にではなくドキュメントに明記していただけるようお願いします。
2013-09-20 15:13