Bitmap のファイル構造 03 ( 画像データ )

ファイル構造は「ヘッダ部」と「データ部」からなっている。
データ部は、パレットデータ ( ない場合もある )・画像データで構成されている。
画像データの各メンバ名の説明。

 

24 bit RGB 値の画像データについて、
RGB 各色で 8bit 深度の値を格納するだけだが、いくつか注意点がある。

 

1.

BMP 形式では画素情報の格納順序がボトムアップ ( 下から上 ) になっている。

f:id:koshinRan:20190207082235p:plain

ファイルを逆方向から走査するのは効率が悪いので、
順次読み込みつつ、 格納先の下から格納していくことになる。

 

 

2.

各画素の R G B 値の格納順が B G R の順序になっている。
B G R と読み込んでリトルエンディアンの 1 つの整数に代入したとすれば
( 3 Byte をまとめて読みだしてリトルエンディアンで解釈したとすると )
上位桁から RGB となる。
ex 1 )
例えば、B=0xaa, G=0xbb, R=0xcc であればリトルエンディアンで解釈すると
 0xccbbaa になり、上位桁から RGB の順序になる。

ex 2 ) https://www.mm2d.net/main/prog/c/image_io-10.html より
幅 3・高さ 3 、の画像で各ピクセルの色が下記の様になっていた場合、
バイナリデータとして見るとどうなっているか。
f:id:koshinRan:20190218150113p:plain

バイナリ
f:id:koshinRan:20190218150301p:plain
f:id:koshinRan:20190218150411p:plain

一番最初に入っているのは左下に当たる #ffcc00 が、 B G R の順で入っている。
次に #ffcc66、#ffcccc と入って 3 byte のパディングとして 0x00 が格納。
それ以降の行も同じように格納されている。

 

 

3.

1 行のデータサイズを 4 の整数倍整える必要がある。
1 画素が 3 byte なのでデータサイズは 3 の整数倍になり、
横のピクセル数が 4 の倍数でなければ必ず端が出てくる。
画素情報だけで 4 の倍数にならない場合は 4 の倍数になる数だけの
詰め物 ( パディング ) が必要となる。( % 剰余 使う ?  )

 

 

 

こちらから。
https://www.mm2d.net/main/prog/c/image_io-10.html
https://msdn.microsoft.com/ja-jp/library/cc370952.aspx
https://www.mm2d.net/main/prog/c/image_io-04.html
https://www.mm2d.net/main/

以上。