Microsoft Windows Bitmap Image

ファイル概要
画像ファイル。Windowsでよく使われているビットマップイメージファイル。
圧縮
可能だが、あまり使われていない。
拡張子
.bmp
MIME Type
image/x-ms-bmp

ファイル構造

ファイルの構造には何種類かある。Windows 3.0以降対応のフォーマットが一般的。

OS/2 1.1

BITMAPFILEHEADER
BITMAPCOREHEADER
RGBTRIPLE※1
画像データ

OS/2 2.x

BITMAPFILEHEADER2
BITMAPINFOHEADER2
RGBTRIPLE※1
画像データ

Windows 3.0以降対応

BITMAPFILEHEADER
BITMAPINFOHEADER
RGBQUAD※1
画像データ

Windows 95以降対応

BITMAPFILEHEADER
BITMAPV4HEADER
RGBQUAD※1
画像データ

Windows 98以降対応

BITMAPFILEHEADER
BITMAPV5HEADER
RGBQUAD※1
画像データ

ファイルヘッダ

BITMAPFILEHEADER

オフセット 名前 サイズ 概要
0x0000 bfType 2 byte ファイルの種別を示す。"BM"で固定。
0x0002 bfSize 4 byte ファイルサイズを表す。単位はbyte。
0x0006 bfReserved1 2 byte 予約領域 その1。0で固定。
0x0008 bfReserved2 2 byte 予約領域 その2。0で固定。
0x000a bfOffBits 4 byte オフセット。ビットマップデータの開始位置のbyte数。

BITMAPFILEHEADER2

調査中

情報ヘッダ

BITMAPCOREHEADER

オフセット 名前 サイズ 概要
0x000e bcSize 4 byte 情報ヘッダのサイズ。単位はbyte。12で固定。
0x0012 bcWidth 2 byte ビットマップイメージの横幅。単位はpixel。
0x0014 bcHeight 2 byte ビットマップイメージの縦幅。単位はpixel。
0x0016 bcPlanes 2 byte プレーン数。1で固定。
0x0018 bcBitCount 2 byte 1pixelあたりのデータサイズ。単位はbit。値は1, 4, 8, 24。

BITMAPINFOHEADER

オフセット 名前 サイズ 概要
0x000e biSize 4 byte 情報ヘッダのサイズ。単位はbyte。40で固定。
0x0012 biWidth 4 byte ビットマップイメージの横幅。単位はpixel。
0x0016 biHeight 4 byte ビットマップイメージの縦幅。単位はpixel。負の数だと、左上から右下への描画となる。
0x001a biPlanes 2 byte プレーン数。1で固定。
0x001c biBitCount 2 byte 1pixelあたりのデータサイズ。単位はbit。値は、0, 1, 4, 8, 16, 24, 32※2
0x001e biCompression 4 byte 圧縮形式※3
0x0022 biSizeImage 4 byte ビットマップデータのサイズ。単位はbyte。
biCompressionの値がBI_RGBなら0でもよい。biCompressionの値がBI_JPEGかBI_PNGならイメージバッファのサイズを示す。
0x0026 biXPelsPerMeter 4 byte 水平方向の解像度。単位はpx/m。
0x002a biYPelsPerMeter 4 byte 垂直方向の解像度。単位はpx/m。
0x002e biClrUsed 4 byte カラーパレット数。
0x0032 biClrImportant 4 byte 表示に必要な色の数。0なら全て必要。

BITMAPINFOHEADER2

調査中

BITMAPV4HEADER

オフセット 名前 サイズ 概要
0x000e bV4Size 4 byte 情報ヘッダのサイズ。単位はbyte。108で固定。
0x0012 bV4Width 4 byte ビットマップイメージの横幅。単位はpixel。
0x0016 bV4Height 4 byte ビットマップイメージの縦幅。単位はpixel。負の数だと、左上から右下への描画となる。
0x001a bV4Planes 2 byte プレーン数。1で固定。
0x001c bV4BitCount 2 byte 1pixelあたりのデータサイズ。単位はbit。値は、0, 1, 4, 8, 16, 24, 32※2
0x001e bV4Compression 4 byte 圧縮形式※3
0x0022 bV4SizeImage 4 byte ビットマップデータのサイズ。単位はbyte。
bV4Compressionの値がBI_RGBなら0でもよい。bV4Compressionの値がBI_JPEGかBI_PNGならイメージバッファのサイズを示す。
0x0026 bV4XPelsPerMeter 4 byte 水平方向の解像度。単位はpx/m。
0x002a bV4YPelsPerMeter 4 byte 垂直方向の解像度。単位はpx/m。
0x002e bV4ClrUsed 4 byte カラーパレット数。
0x0032 bV4ClrImportant 4 byte 表示に必要な色の数。0なら全て必要。
0x0036 bV4RedMask 4 byte 各画素の赤要素に対するマスク。bV4Compressionの値がBI_BITFIELDSのときに有効。
0x003a bV4GreenMask 4 byte 各画素の緑要素に対するマスク。bV4Compressionの値がBI_BITFIELDSのときに有効。
0x003e bV4BlueMask 4 byte 各画素の青要素に対するマスク。bV4Compressionの値がBI_BITFIELDSのときに有効。
0x0042 bV4AlphaMask 4 byte 各画素のアルファ要素に対するマスク。bV4Compressionの値がBI_BITFIELDSのときに有効。
0x0046 bV4CSType 4 byte 色空間。v4ではLCS_CALIBRATED_RGBのみ※4
0x005a bV4Endpoints 36 byte R,G,Bの各エンドポイントのCIEXYZ値。
具体的には
赤のエンドポイントのCIEXYZ値(x, y, z)
緑のエンドポイントのCIEXYZ値(x, y, z)
青のエンドポイントのCIEXYZ値(x, y, z)
x,y,zはそれぞれ符号付32bit整数型。
bV4CSTypeがLCS_CALIBRATED_RGBのときのみ使用。
0x007e bV4GammaRed 4 byte 赤要素のガンマ値。16^16 format(謎)。bV4CSTypeがLCS_CALIBRATED_RGBのときのみ使用。
0x0082 bV4GammaGreen 4 byte 緑要素のガンマ値。16^16 format(謎)。bV4CSTypeがLCS_CALIBRATED_RGBのときのみ使用。
0x0086 bV4GammaBlue 4 byte 青要素のガンマ値。16^16 format(謎)。bV4CSTypeがLCS_CALIBRATED_RGBのときのみ使用。

BITMAPV5HEADER

オフセット 名前 サイズ 概要
0x000e bV5Size 4 byte 情報ヘッダのサイズ。単位はbyte。124で固定。
0x0012 bV5Width 4 byte ビットマップイメージの横幅。単位はpixel。
0x0016 bV5Height 4 byte ビットマップイメージの縦幅。単位はpixel。負の数だと、左上から右下への描画となる。
0x001a bV5Planes 2 byte プレーン数。1で固定。
0x001c bV5BitCount 2 byte 1pixelあたりのデータサイズ。単位はbit。値は、0, 1, 4, 8, 16, 24, 32※2
0x001e bV5Compression 4 byte 圧縮形式※3
0x0022 bV5SizeImage 4 byte ビットマップデータのサイズ。単位はbyte。
bV5Compressionの値がBI_RGBなら0でもよい。bV5Compressionの値がBI_JPEGかBI_PNGならイメージバッファのサイズを示す。
0x0026 bV5XPelsPerMeter 4 byte 水平方向の解像度。単位はpx/m。
0x002a bV5YPelsPerMeter 4 byte 垂直方向の解像度。単位はpx/m。
0x002e bV5ClrUsed 4 byte カラーパレット数。
0x0032 bV5ClrImportant 4 byte 表示に必要な色の数。0なら全て必要。
0x0036 bV5RedMask 4 byte 各画素の赤要素に対するマスク。bV5Compressionの値がBI_BITFIELDSのときに有効。
0x003a bV5GreenMask 4 byte 各画素の緑要素に対するマスク。bV5Compressionの値がBI_BITFIELDSのときに有効。
0x003e bV5BlueMask 4 byte 各画素の青要素に対するマスク。bV5Compressionの値がBI_BITFIELDSのときに有効。
0x0042 bV5AlphaMask 4 byte 各画素のアルファ要素に対するマスク。bV5Compressionの値がBI_BITFIELDSのときに有効。
0x0046 bV5CSType 4 byte 色空間※4
0x005a bV5Endpoints 36 byte R,G,Bの各エンドポイントのCIEXYZ値。
具体的には
赤のエンドポイントのCIEXYZ値(x, y, z)
緑のエンドポイントのCIEXYZ値(x, y, z)
青のエンドポイントのCIEXYZ値(x, y, z)
x,y,zはそれぞれ符号付32bit整数型。
bV5CSTypeがLCS_CALIBRATED_RGBのときのみ使用。
0x007e bV5GammaRed 4 byte 赤要素のガンマ値。16^16 format(謎)。bV5CSTypeがLCS_CALIBRATED_RGBのときのみ使用。
0x0082 bV5GammaGreen 4 byte 緑要素のガンマ値。16^16 format(謎)。bV5CSTypeがLCS_CALIBRATED_RGBのときのみ使用。
0x0086 bV5GammaBlue 4 byte 青要素のガンマ値。16^16 format(謎)。bV5CSTypeがLCS_CALIBRATED_RGBのときのみ使用。
0x008a bV5Intent 4 byte レンダリングの意図※5
0x008e bV5ProfileData 4 byte プロファイルデータのオフセット。
PROFILE_LINKEDならファイル名を示す文字列(末尾はヌル文字)
PROFILE_EMBEDDEDならオフセットのバイト数?
0x0092 bV5ProfileSize 4 byte プロファイルデータのサイズ。単位はbyte。
0x0096 bV5Reserved 4 byte 予約。0で固定。

カラーパレット

RGBTRIPLE

名前 サイズ 概要
rgbtBlue 1 byte 青色。0-255.
rgbtGreen 1 byte 緑色。0-255.
rgbtRed 1 byte 赤色。0-255.

RGBQUAD

名前 サイズ 概要
rgbBlue 1 byte 青色。0-255.
rgbGreen 1 byte 緑色。0-255.
rgbRed 1 byte 赤色。0-255.
rgbReserved 1 byte 予約領域。0で固定。

註釈

※1 カラーパレット付きのときのみ
※2 ビット数について
0 - JPEGやPNGの中で記述する。
1 - 2色インデックスカラー。
4 - 16色インデックスカラー。
8 - 256色インデックスカラー。
16 - 16bitRGBカラー。
xCompressionがBI_RGBのときR,G,B各要素5bitで表現される。最上位ビットは使用しない。
xCompressionがBI_BITFIELDSのときはマスク(4byte * 3)に依存。Win95/98/Meは5-5-5bitのみ対応。
24 - 24bitRGBカラー。R,G,B各要素1byteで表現される。最上位の1byteは使用しない。
32 - 32bitRGBカラー。
xCompressionがBI_RGBのときR,G,B各要素5bitで表現される。最上位ビットは使用しない。
xCompressionがBI_BITFIELDSのときはマスク(4byte * 3)に依存。Win95/98/Meは8-8-8bitのみ対応。
※3 圧縮形式について
0 - 無圧縮形式。この形式がほとんど。BI_RGB.
1 - 8bitインデックスカラー用ランレングス圧縮形式。BI_RLE8.
2 - 4bitインデックスカラー用ランレングス圧縮形式。BI_RLE4.
3 - ビットフィールド形式。BI_BITFIELDS.
4 - JPEG圧縮形式。BI_JPEG.
5 - PNG圧縮形式。BI_PNG.
※4 色空間について
0x00000000 - エンドポイントとガンマ値が適切な値で与えられていることを示す。LCS_CALIBRATED_RGB.
0x73524742 - 文字列なら"sRGB". sRGB空間を使用していることを示す。LCS_sRGB.
0x57696e20 - 文字列なら"Win ". WindowsのシステムデフォルトカラーのsRGB空間を使用していることを示す。LCS_WINDOWS_COLOR_SPACE.
0x4c494e4b - 文字列なら"LINK". 使用するプロフィールファイルへのパスがbV5ProfileDataで指定されてることを示す。ガンマ・エンドポイント値は無視される。PROFILE_LINKED.
0x4d424544 - 文字列なら"MBED". 使用するプロフィールへのメモリバッファがbV5ProfileDataで指定されていることを示す。ガンマ・エンドポイント値は無視される。PROFILE_EMBEDDED.
※5 レンダリングの意図について
1 - 彩度を維持する。ビジネスチャートやundithered(ギザギザ感のない)な色を求めるときに使用する。LCS_GM_BUSINESS.
2 - 相対カラーメトリック。グラフィックデザインに。LCS_GM_GRAPHICS.
4 - コントラストを維持する。写真や自然イメージのために使用される。LCS_GM_IMAGES.
8 - 絶対相対カラーメトリック。白色点を維持する。色をその色空間で最も近い色に一致させる。LCS_GM_ABS_COLORIMETRIC.
※6 データの配列はリトルエンディアンです。例えば0x001122というデータがあれば、22 11 00という順に挿入されます。
※7 サイズ部分がこの色は符号なしこの色は符号あり

参考

  1. Microsoft Visual Studio .NET 2003 ドキュメント
  2. ウィキペディア「Windows bitmap」の項
  3. BMPファイルの構造 - ルーチェ's Homepage
  4. noocyte のプログラミング研究室
  5. http://nienie.com/~masapico/cmmemo.txt

[BACK]

[HOME]


最終更新日:2007年04月08日