BMPファイル形式の詳細解説
BMPファイル形式、正式にはWindows BitmapまたはDevice Independent Bitmap (DIB) は、
マイクロソフトと
IBMが共同開発していたOS時代から存在する
画像ファイル形式です。Windowsの標準
画像形式として広く使用されており、その歴史は長く、ファイル形式自体も幾度かの変更を経ています。そのため、WindowsとOS/2では細かな差異が存在するケースもあります。
BMPファイルの構造
BMPファイルは、大きく分けて以下のブロックで構成されています。
1.
ファイルヘッダ: ファイル全体に関する基本的な情報(ファイルサイズ、データの開始位置など)が格納されています。
2.
情報ヘッダ: 画像データの詳細(幅、高さ、色数、圧縮方法など)が格納されています。このヘッダーはバージョンによってサイズや含まれる情報が異なり、BITMAPINFOHEADER、BITMAPV3INFOHEADER、BITMAPV
4HEADER、BITMAPV5HEADERなどがあります。OS/2用のBITMAPCOREHEADERも存在します。
3.
カラーマスク (場合によっては): ビットフィールド形式の
ビットマップで使用され、各色成分(
赤、
緑、
青、α)を抽出するために必要な情報が格納されます。
4.
カラーパレット (場合によっては): インデックスカラービットマップの場合、各インデックス番号に対応する色が格納されます。ダイレクトカラー
ビットマップでは、減色時に優先される色が格納されることがあります。
5.
ビットマップデータ: 実際の
画像データが
ピクセルごとに格納されています。通常はボトムアップ形式(下から上)で記録されますが、トップダウン形式(上から下)もサポートしています。ただし、トップダウン形式では圧縮ができません。
6.
カラープロファイル (場合によっては): ICCプロファイルデータ、またはそのファイルパスが格納されます。
ヘッダー情報の詳細
情報ヘッダーは、
画像の幅、高さ、色深度、圧縮方法などの重要な情報を保持しています。特に、ヘッダーのバージョンによって含まれる情報やサイズが大きく異なるため注意が必要です。 例えば、`BITMAPINFOHEADER` はWindowsで広く使用されている基本的なヘッダーですが、`BITMAPV
4HEADER` や `BITMAPV5HEADER` はより高度な情報を扱うことができます。OS/2環境では、`BITMAPCOREHEADER` や `BITMAPINFOHEADER2` が使用されます。
これらのヘッダーには、
画像の解像度、圧縮方法、色空間の情報などが含まれており、アプリケーションはこれらの情報に基づいて
画像を正しく表示または処理することができます。圧縮方法は、BI_
RGB(非圧縮)、BI_RLE8(8
ビットRLE圧縮)、BI_RLE
4(
4ビットRLE圧縮)、BI_BITFIELDS(
ビットフィールド圧縮)などがあります。
カラーパレットとビットマップデータ
カラーパレットは、
インデックスカラービットマップで使用される色の定義を保持しています。各
ピクセルは、カラーパレット内のインデックス番号で表現されます。一方、ダイレクトカラー
ビットマップでは、各
ピクセルが直接
RGB値で表現されます。
ビットマップデータは、
画像の
ピクセルデータを格納する部分です。
ピクセルデータは、通常は左下から右上に、行ごとに格納されます。各
ピクセルのデータサイズは、色深度によって異なります。また、水平方向のバイト数が
4の倍数でない場合は、0x00でパディングされます。
BMPファイルを取り扱うライブラリ
BMPファイルの読み書きや操作を容易にするためのライブラリが数多く存在します。代表的なものとしては、Windows API、MFC、ATL、GDI+、WIC、
.NET FrameworkのSystem.Drawing、System.Windows.Media.Imagingなどがあります。また、オープンソースのライブラリもいくつか公開されています。これらのライブラリを利用することで、開発者はBMPファイルの処理を効率的に行うことができます。
まとめ
BMPファイル形式は、シンプルながらも多様な機能を持つ
画像ファイル形式です。歴史的経緯から異なるバージョンが存在し、OS/2とWindowsでの違いにも注意が必要です。様々なプログラミング環境やライブラリがBMPファイルをサポートしており、
画像処理アプリケーション開発において重要な役割を果たしています。