ほんとうに困ったものです。
32bitBMPはヘッダ構造が幾つか種類があり、BITMAPINFOHEADERの他にBITMAPV5HEADERやらBITMAPV4HEADERなどがあります。古いツールだとBITMAPINFOHEADERしか対応してなくて、コンバートできなかったりするんですが、その他にもコンバートができないケースが多かったものをメモ。
16bitBMPと32bitBMPでは、HEADER構造でbiCompressionが3になってるケースが有り(通常0)、この場合は先頭から54バイト目の位置に、12バイトのカラーマスクが格納されています。このカラーマスクは構造体自身のサイズ数に含まれないため、biSizeが40でも実際は52バイト目までがヘッダ領域だったりします。GIMPでBMPを書きだすと、BITMAPV5HEADER形式でbiCompressionが3になってる事が多いです。
こやつがどうも曲者らしく、blenderでGIMP出力のBMPを読み込もうとすると、エラーで画像が表示されませんでした。また画像ライブラリのSDL_ImageでもbiCompressionが3になってるケースはサポートされてないらしく(コードを追ってたらコメントにそう書かれてた)、かなりのレアケースとして扱われているようです。ちょっと調べてみたところ、モデリングツールの多くがこれをサポートしてない模様。マスク自体は別段難しい技術でもないのになぁ・・・なんで対応してないんだろう??
2Dも3Dもデータ形式が面倒過ぎます。。
blenderと32bitBMPの相性が悪くて云々
Re: blenderと32bitBMPの相性が悪くて云々
マスク扱うとなると、どうしてもメモリを食うんですよね。
だからグラフィックの編集をするアプリケーションにしか通常サポートしていないと思いますよ。
画像ライブラリと言っても、主に表示するためだけならマスク機能なんて必要のない機能ですしね。
ゲームで画像を編集するなんてのは普通ないし、表示する方法だってパターン化できるものですからね。
(マスクをかけたいなら一つの色を通常それに当てて、ハードウェアの機能を呼ぶとかします)
2Dも3Dもデータ形式が用途によって最適化されるのは当然と考えてください。
だからグラフィックの編集をするアプリケーションにしか通常サポートしていないと思いますよ。
画像ライブラリと言っても、主に表示するためだけならマスク機能なんて必要のない機能ですしね。
ゲームで画像を編集するなんてのは普通ないし、表示する方法だってパターン化できるものですからね。
(マスクをかけたいなら一つの色を通常それに当てて、ハードウェアの機能を呼ぶとかします)
2Dも3Dもデータ形式が用途によって最適化されるのは当然と考えてください。
最後に編集したユーザー へにっくす on 2013年8月19日(月) 02:46 [ 編集 1 回目 ]
Re: blenderと32bitBMPの相性が悪くて云々
BMPのカラーマスクはチャンネルごとの値をバイト単位ではなくビット単位で詰め込むためのビットマスクなので、アルファチャンネルやステンシルとは違います。へにっくす さんが書きました:マスク扱うとなると、どうしてもメモリを食うんですよね。
だからグラフィックの編集をするアプリケーションにしか通常サポートしていないと思いますよ。
画像ライブラリと言っても、主に表示するためだけならマスク機能なんて必要のない機能ですしね。
ゲームで画像を編集するなんてのは普通ないし、表示する方法だってパターン化できるものですからね。
(マスクをかけたいなら一つの色を通常それに当てて、ハードウェアの機能を呼ぶとかします)
2Dも3Dもデータ形式が用途によって最適化されるのは当然と考えてください。
ですからメモリを余計に食うことはありません。
Re: blenderと32bitBMPの相性が悪くて云々
そもそも32ビットBMP形式で保存できるマイクロソフト製のアプリケーションソフトが存在しないような。
本家MSDNライブラリ英語版のBITMAPV5HEADERのBI_BITFIELDSに関する説明も間違ったまま(というか正式な仕様が不明)ですし。
減色処理が必要だから対応しないというのもあるかもしれません。
BI_RGBだと32ビットBMPでもマスク固定で24ビットしか使わないですから。
でもなぜBMPなんでしょう。
PNGは使えないですか?
本家MSDNライブラリ英語版のBITMAPV5HEADERのBI_BITFIELDSに関する説明も間違ったまま(というか正式な仕様が不明)ですし。
減色処理が必要だから対応しないというのもあるかもしれません。
BI_RGBだと32ビットBMPでもマスク固定で24ビットしか使わないですから。
でもなぜBMPなんでしょう。
PNGは使えないですか?
最後に編集したユーザー ISLe on 2013年8月19日(月) 17:22 [ 編集 1 回目 ]
Re: blenderと32bitBMPの相性が悪くて云々
ビットでいけるんですね。んー考え違いしてました。ご指摘ありがとうございます。h2so5 さんが書きました:BMPのカラーマスクはチャンネルごとの値をバイト単位ではなくビット単位で詰め込むためのビットマスクなので、アルファチャンネルやステンシルとは違います。
ですからメモリを余計に食うことはありません。
いい加減なこと書いてすみません。
PNGとかになると圧縮が絡むからでは?(ってたぶんライブラリで吸収されているとは思うけど)ISLe さんが書きました:でもなぜBMPなんでしょう。
PNGは使えないですか?
じかにそのピクセルデータに対しアクセスしたいとか、、、そんなわけないか
最後に編集したユーザー へにっくす on 2013年8月19日(月) 23:50 [ 編集 1 回目 ]
Re: blenderと32bitBMPの相性が悪くて云々
特にこだわりがあったわけではないのです、たまたま使ってた形式がBMPだから調べてみただけですよん
後に画像の形式はpngで統一するようにしました。。
後に画像の形式はpngで統一するようにしました。。