- ベストアンサー
WINDOWSのペイントで作るBMPファイルの構成
ペイントで作るBMPファイルの内容が詳しく解説しているサイト等ご存知でしたら教えてください。 BMPファイルのフォーマット等の解説はいろいろありますが実際に作ったファイル内容を見てみますと色数では18hでWINDOWS仕様には無い?(OS/2ではフルカラー?)ですとか2×2ピクセル、3×3ピクセル等小さいファイルを作ってみますと余計な00hが存在する様です。 R,G,Bの3byteで1ピクセルが連続するものと思っていますが途中で余計な00hがあります。 このあたりを理解したいと思っております。 よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
> 色数では18hでWINDOWS仕様には無い?(OS/2ではフルカラー?) Windowsでも24bitの事を指し、いわゆるフルカラーですよ。 No.1さんのリンク先の説明だと、 | イメージデータにおいて1ピクセルを表現するのに必要なビット数が符号無し整数値で入る。 | 値は0、1、4、8、16、24、32のいずれかとなり、 > 2×2ピクセル、3×3ピクセル等小さいファイルを作ってみますと余計な00hが存在する様です。 同様に、 | 更に、行データは必ず4バイトの整数倍のサイズでなければならない。 の仕様に基づく00hです。 4×4、4×3、8×3では余計な00hは入らないハズです。
その他の回答 (3)
データが4バイトの倍数だった場合のメリットとして、 32bit CPUの汎用レジスタで一気にメモリコピーができます。 BMPはビデオカードのデバイスドライバーとも密接に 関連している形式ですので、データが15バイトだった場合、 4バイトコピー3回、1バイトコピー3回になります。 これをアセンブラで書くと面倒なんです。
- yosi_yosi
- ベストアンサー率35% (165/468)
色数が18Hではなくビット深度が18H(=24)ということでしょう。つまり24ビットカラーのBMPファイルです。これは基本的なことですので、調べればすぐに分かると思いますが... また、BMPファイルの色の並び(24ビットカラー)はR,G,Bではなく、B,G,Rです。2x2や3x3の場合になぜ00Hが入っているかというと、1行分のデータは4バイト境界にしなくてはいけないからです。2x2の場合には1行のデータは2x3=6バイトになりますから、4バイト境界にするためには2バイト分の余分なデータ(これが00H)が必要なわけです。 さらに、BITMAPINFOHEADERのbiHeightが0未満の場合はそのまま読めばいいですが、そうでない場合には画像の上下がひっくり返っています。これにも注意が必要です。 その他の色数ではパレットの存在もありますから、とりあえずは24ビットカラーのBMPファイルでいろいろと学習してください。これが一番単純で分かりやすいはずです。
- hamuzo
- ベストアンサー率48% (88/180)
私は詳しくないのですが こんなページを見つけました。 BMPファイル仕様
- 参考URL:
- http://www.ruche-home.net/