バイナリ構造バイナリ構造BMPファイルのバイナリ構造の解説。†BMPファイルのバイナリ構造は、データの先頭から順に以下のような構成要素を持つ。ファイルヘッダ情報ヘッダビットフィールドカラーパレットイメージデータこのうち、ビットフィールドとカラーパレットについては情報ヘッダの内容次第で存在しないことがある。イメージデータは情報ヘッダの内容によって形式が大きく変わる。BMPバイナリ中にある2バイト及び4バイトの整数値データのバイトオーダはリトルエンディアンであり、符号付き整数値の場合は最上位ビットを符号ビットとする2の補数表現を用いる。Windows環境しか考慮しないのであればバイトオーダを気にする必要はないが、プラットフォームに依存しないコードを記述する際には留意すること*1。†ファイルヘッダはBMPファイルのバイナリ構造において最初に現れる必要があり、以下の構成要素を持つ。要素バイト数ファイルタイプ2ファイルサイズ4予約12予約22イメージデータオフセット4以下に各構成要素の詳細を述べる。エンコーダは必ずこの値を格納するべきで、デコーダはこの値であるかをチェックするべきである。ファイルサイズ(4バイト)BMPファイル全体のバイト単位でのサイズが符号無し整数値で入る。デコーダはこの値を利用する必要はなく、また信用するべきでもない。デコーダはこれらの値を無視して構わない。イメージデータオフセット(4バイト)BMPファイルの最初からイメージデータの先頭までのバイト単位でのオフセットが符号無し整数値で入る。以外であった場合は信用するべきである。情報ヘッダはファイルヘッダのすぐ後に続いて現れる必要があり、以下の4種類が存在する。COREタイプ(12バイト)INFOタイプ(40バイト)V4タイプ(40〜108バイト)V5タイプ(40〜124バイト)これらのうち、現在一般的なBMPファイルに使われているのはINFOタイプである。エンコーダはこのタイプさえ書き出せるならば問題はなく、デコーダは最低でもこのタイプに対応する必要がある。どの情報ヘッダタイプにおいても最初の4バイトは必ずヘッダサイズとなる。よって複数のタイプに対応するデコーダは、まず最初の4バイトを読み取り、その数値で情報ヘッダタイプを判別する。†COREタイプはOS/2で使われていた情報ヘッダ形式で、以下の構成要素を持つ。要素バイト数ヘッダサイズ4幅2高さ2プレーン数2ピクセル毎のビット数2以下に各構成要素の詳細を述べる。ヘッダサイズ(4バイト)情報ヘッダのバイト単位でのサイズが符号無し整数値で入る。エンコーダは必ずこの値を格納するべきで、デコーダはこの値を用いて情報ヘッダを判別する。幅(2バイト)高さ(2バイト)イメージのピクセル単位での幅と高さが符号無し整数値で入る。以上でなければならない。プレーン数(2バイト)イメージのプレーン数(チャンネル数)が符号無し整数値で入る。エンコーダは必ずこの値を格納するべきで、厳密でないデコーダはこの値を無視しても構わない。ピクセル毎のビット数(2バイト)イメージデータにおいて1ピクセルを表現するのに必要なビット数が符号無し整数値で入る。