2次元画像処理 BMP 新しいページはコチラ
提供: yonewiki
(→概要) |
(→ファイル構成) |
||
9行: | 9行: | ||
== '''ファイル構成''' == | == '''ファイル構成''' == | ||
− | *Bitmapファイルヘッダー | + | *'''Bitmapファイルヘッダー''' |
:00~01 2Byte:''''B','M'にあたるアスキーコード0x42→B 0x4d→M 固定です。''' | :00~01 2Byte:''''B','M'にあたるアスキーコード0x42→B 0x4d→M 固定です。''' | ||
:02~05 4Byte:ファイルサイズ[Byte]を格納します。符号なし整数として記載。'''30~33の領域で指定している値が0の場合0でも、正しい値でもなんでもOK。''' | :02~05 4Byte:ファイルサイズ[Byte]を格納します。符号なし整数として記載。'''30~33の領域で指定している値が0の場合0でも、正しい値でもなんでもOK。''' | ||
19行: | 19行: | ||
※符号なし整数部はリトルエンディアン方式なので 10~13の情報は54ビットを表すためには0x00,0x00,0x00,0x36を逆順にならべて0x36,0x00,0x00,0x00になります。 | ※符号なし整数部はリトルエンディアン方式なので 10~13の情報は54ビットを表すためには0x00,0x00,0x00,0x36を逆順にならべて0x36,0x00,0x00,0x00になります。 | ||
− | *Bitmap情報ヘッダーWindows系 | + | *'''Bitmap情報ヘッダーWindows系''' |
:14~17 4Byte:情報ヘッダのバイト数。24bitColorRGBファイルなら40byteなので、0x28です。0x28,0x00,0x00,0x00ですね。 | :14~17 4Byte:情報ヘッダのバイト数。24bitColorRGBファイルなら40byteなので、0x28です。0x28,0x00,0x00,0x00ですね。 | ||
:18~21 4Byte:'''画像の横幅pixel''' | :18~21 4Byte:'''画像の横幅pixel''' | ||
46行: | 46行: | ||
:46~49 4Byte:パレット数:色番号1から順番に格納される色情報を画像データとヘッダ情報の間にいれることができます。その色数。正しい情報が入っていない場合もあるみたいです。その場合は28~29で指定される色数情報が優先されて読み込むようになっています。 | :46~49 4Byte:パレット数:色番号1から順番に格納される色情報を画像データとヘッダ情報の間にいれることができます。その色数。正しい情報が入っていない場合もあるみたいです。その場合は28~29で指定される色数情報が優先されて読み込むようになっています。 | ||
:50~53 4byte:重要色数。これが正確に指定されていることも少ない情報です。 | :50~53 4byte:重要色数。これが正確に指定されていることも少ない情報です。 | ||
+ | |||
+ | |||
+ | *'''Bitmapパレット''' | ||
+ | |||
+ | |||
+ | *'''Bitmapデータ''' | ||
+ | ここからがRGBデータの並びになります。画像の左下から水平に右へと1ピクセルの行にあたるモノをピクセルごとにデータとして格納していて、1行のデータがおわると画像の上側の情報を描くように順次データを格納しています。データ自体に行の終端のデータはないので、ヘッダー情報にある横幅の大きさ分を読み込んだら次の上の行のデータであるとプログラム側が認識して描画していきます。ここで少し変わった決まりがあって4の倍数バイトが1行になるようにデータが調整されていないといけないことになっています。1行が4の倍数バイトにならない場合は0x00のようなダミーデータを埋めることになっています。書き込む場合はダミーデータを入れ忘れないようにすること、読み込むときは4の倍数バイトが1行であることを認識してダミーデータを無視するような処理をしなければなりません。RGBの値は24bitつまり3バイトで表現され、例えば赤のピクセルのRGB値は0xFF,0x00,0x00、リトルエンディアンのように、BGRの順でデータが格納されます。ですから赤は0x00,0x00,0xFFとなります。 | ||
+ | |||
+ | |||
+ | 上記のようなビットマップ仕様からすると横幅5ピクセルのビットマップなら、1行のデータを16バイトづつ表示するようなバイナリーエディタでその形を想像することができるような表示がなされます。下から上にデータがつまっているため、像は逆さになりますね。ちなみに縦幅をヘッダー部で負の値として登録すると上から下に像の情報が格納されているとしてデータのつまりかたと実際の描画情報の縦の向きが同じになります。横方向についても同じ法則を持っていますので、左からではなく右から左に描画がなされます。 |