横のデータ長を 4 byte 境界にあわせる点が重要です。
全体構造 | |
---|---|
ファイルヘッダ | |
情報ヘッダ | 新(Windows)、旧(OS/2) の2タイプがある |
カラーパレット | |
画像データ |
ファイルヘッダ | ||
---|---|---|
2 byte | ファイルタイプ | 'BM' |
4 byte | ファイルサイズ (byte) | |
2 byte | --- | 常に0 |
2 byte | --- | 常に0 |
4 byte | ファイル先頭から画像データまでのオフセット (byte) |
OS/2 情報ヘッダ | ||
---|---|---|
4 byte | 情報ヘッダのサイズ (byte) | 12 |
2 byte | 画像の幅 (ピクセル) | |
2 byte | 画像の高さ (ピクセル) | 正数なら下から上、 負数なら上から下へ画像データが並ぶ |
2 byte | 平面数 | 常に 1 |
2 byte | 1画素あたりのビット数 | 1 - 2 色ビットマップ 4 - 16 色ビットマップ 8 - 256 色ビットマップ 16 - 65536色(high color)ビットマップ (正式には対応していない) 24 - 1677万色(true color)ビットマップ 32 - 1677万色(true color)ビットマップ |
Windows 情報ヘッダ | ||
4 byte | 情報ヘッダのサイズ (byte) | 40 |
4 byte | 画像の幅 (ピクセル) | |
4 byte | 画像の高さ (ピクセル) | 正数なら下から上、 負数なら上から下へ画像データが並ぶ |
2 byte | 平面数 | 常に 1 |
2 byte | 1画素あたりのビット数 | 1 - 2 色ビットマップ 4 - 16 色ビットマップ 8 - 256 色ビットマップ 16 - 65536色(high color)ビットマップ (正式には対応していない) 24 - 1677万色(true color)ビットマップ 32 - 1677万色(true color)ビットマップ |
4 byte | 画像データ部のサイズ (byte) | 0でも構わない |
4 byte | 横方向解像度 (1mあたりの画素数) | 0でも構わない |
4 byte | 縦方向解像度 (1mあたりの画素数) | 0でも構わない |
4 byte | 格納されているパレット数 (使用色数) | パレットを使用しない場合 0 |
4 byte | 重要なパレットのインデックス | アプリケーションによって抜き色などに使用されることがあり、 この色が画像変換処理などの後でも 変更されず保持されることを想定する場合がある |
1画素あたりのビット数が 1, 4, 8 の場合に存在します。
それ以外の場合でも、カラーパレットがある場合があります。
OS/2 カラーパレット | ||
---|---|---|
1 byte | 青 | 0〜255 |
1 byte | 緑 | 0〜255 |
1 byte | 赤 | 0〜255 |
Windows カラーパレット | ||
1 byte | 青 | 0〜255 |
1 byte | 緑 | 0〜255 |
1 byte | 赤 | 0〜255 |
1 byte | --- |
カラーパレットの下、もしくは情報ヘッダのすぐ下に画像データがあることは保障されないので、
ファイル先頭から画像データまでのオフセットを使用してデータ位置までシークする必要があります。
横のデータ長は 4 byte 境界にあわせる必要があります。
1 bit (2色) 画像データ (パレット画像) | ||
---|---|---|
1 byte | パレットのインデックス | 0, 1 |
... | ||
4 bit (16色) 画像データ (パレット画像) | ||
4 bit | パレットのインデックス | 0〜15 |
... | ||
8 bit (256色) 画像データ (パレット画像) | ||
8 bit | パレットのインデックス | 0〜255 |
... | ||
24 bit (1677万色) 画像データ (ダイレクト画像) | ||
1 byte | 青 | 0〜255 |
1 byte | 緑 | 0〜255 |
1 byte | 赤 | 0〜255 |
... | ||
32 bit (1677万色) 画像データ (ダイレクト画像) | ||
1 byte | 青 | 0〜255 |
1 byte | 緑 | 0〜255 |
1 byte | 赤 | 0〜255 |
1 byte | --- | |
... |