Windows bitmap

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動先: 案内検索
Windows bitmap
拡張子 .bmp
MIME Type image/bmp[1]
タイプコード 'BMP '
'BMPf'
'BMPp'
UTI com.microsoft.bmp
マジックナンバー BM
開発者 マイクロソフト
種別 ビットマップ画像
テンプレートを表示

BMP(ビーエムピー、Microsoft Windows Bitmap Image)またはDIB(ディーアイビー、Device Independent Bitmap、デバイス独立ビットマップ)は、マイクロソフトIBMWindowsOS/2にわかれる前のOSを共同で開発していた頃に作られた画像ファイル形式。圧縮の方法についても定義されているが、Windowsが標準では無圧縮のファイルを生成するため、他のアプリケーションにおいても無指定時は、圧縮はされていない場合が多い。

ファイル形式の細部の変更が何度か行われており、その結果としてWindowsとOS/2で多少ファイル形式が異なることがある。

機械独立のファイル形式として設計されたため、実際に存在する画像表示装置や、印刷装置が、画像を上方から処理するものがほぼ全てであるにもかかわらず、幾何学的なX軸、Y軸方向に座標を指定する形式となっている。その結果、画像を下から上に向かって記録している (Bottom up) のが特徴であるが、後に高さに負の値を指定することでその他大多数の画像ファイル形式と同じように画像を上から下へ向かって記録する (Top down) こともできるようになった。しかし互換性の面からProgramming Windowsではトップダウン形式のビットマップの作成を推奨していない。

なお、ビットマップという呼称は画像データの表現方式のひとつであり、本項で述べているマイクロソフト独自のファイル形式を必ずしも指すわけではない[2]

ファイル構造[編集]

ビットマップファイルは、以下のブロックに分かれている。

ファイルヘッダ
ビットマップファイルについての一般的な情報が格納されている。
情報ヘッダ
ビットマップイメージについての詳細な情報が格納されている。
カラーマスク
ビットフィールド形式のビットマップで使用されるデータが格納される。
カラーパレット
インデックスカラービットマップの場合に使用される色の定義が格納されている。
ダイレクトカラービットマップの場合は減色時に優先される色が格納される。
ビットマップデータ
実際のイメージがピクセルごとに格納されている。
カラープロファイル
ICCプロファイルデータそのものか、プロファイルデータのファイルパスが格納される。
Diag. 1 – Windows BMP形式の画像の構造

主な構造[編集]

OS/2 1.1[編集]

BITMAPFILEHEADER構造体
BITMAPCOREHEADER構造体
カラーパレット(RGBTRIPLE構造体)
画像データ

OS/2 2.x[編集]

BITMAPFILEHEADER2構造体
BITMAPINFOHEADER2構造体
カラーパレット(RGB2構造体)
画像データ

Windows 3.0以降[編集]

BITMAPFILEHEADER構造体
BITMAPINFOHEADER構造体
カラーマスク(ビットフィールド形式のみ)
カラーパレット(RGBQUAD構造体)
画像データ

Windows 95以降採用[編集]

BITMAPFILEHEADER構造体
BITMAPV4HEADER構造体
カラーパレット(RGBQUAD構造体)
画像データ

Windows 98以降採用[編集]

BITMAPFILEHEADER構造体
BITMAPV5HEADER構造体
カラーパレット(RGBQUAD構造体)
画像データ
カラープロファイル

ファイルヘッダ[編集]

BITMAPFILEHEADER[編集]

14byteからなる、ビットマップファイルのファイルヘッダである。

オフセット サイズ 格納する情報 値・備考
0x0000 2 バイト ファイルタイプ 常にBM (0x42, 0x4d)マジックナンバー
0x0002 4 バイト ファイルサイズ ビットマップファイルのサイズを格納する(単位はバイト)。
0x0006 2 バイト 予約領域1 常に0
0x0008 2 バイト 予約領域2 常に0
0x000a 4 バイト オフセット ファイルヘッダの先頭アドレスからビットマップデータの先頭アドレスまでのオフセット(単位はバイト)。

参考URL http://msdn.microsoft.com/en-us/library/dd183374(VS.85).aspx

BITMAPFILEHEADER2[編集]

OS/2 2.xで使用されたファイルヘッダ。BITMAPFILEHEADERを拡張したものだがサイズは同じ。

オフセット サイズ 格納する情報 値・備考
0x0000 2 バイト ファイルタイプ BM (0x42, 0x4d)(ビットマップ)
IC (0x49, 0x43)(アイコン)
CI (0x43, 0x49)(カラーアイコン)
PT (0x50, 0x54)(ポインタ)
CP (0x43, 0x50)(カラーポインタ)
0x0002 4 バイト ヘッダサイズ ファイルヘッダと情報ヘッダの合計サイズを格納する。単位はバイト。
0x0006 2 バイト ホットスポットx カーソルのホットスポットのx座標
0x0008 2 バイト ホットスポットy カーソルのホットスポットのy座標
0x000a 4 バイト オフセット ファイルヘッダの先頭アドレスからビットマップデータの先頭アドレスまでのオフセット。単位はバイト。

情報ヘッダ[編集]

このブロックは、アプリケーションが画像を描画するための画像の詳細な情報が書かれており、14バイト目から始まる。

  • 14-17 (eh-11h) バイト目は、ヘッダのサイズが書かれている。最大値は、
40  - Windows V3
108 - Windows V4
124 - Windows V5
12  - OS/2 V1
64  - OS/2 V2

BITMAPCOREHEADER[編集]

OS/2のビットマップで使われる情報ヘッダで、12バイトある。coreヘッダと呼ばれる。

オフセット サイズ 格納する情報 値・備考
0x000e 4 バイト ヘッダサイズ 12
0x0012 2 バイト ビットマップの横幅 単位はピクセル
0x0014 2 バイト ビットマップの縦幅 単位はピクセル
0x0016 2 バイト プレーン数※昔、EGAやVGAディスプレイカードで使われていた概念で、現在は全く使われない。 常に1
0x0018 2 バイト 1ピクセルあたりのビット数 1,4,8,24

参考URL http://msdn.microsoft.com/en-us/library/dd183372(VS.85).aspx http://www.programmers@heaven.com/mb/graphics/148346/152845/re-planes/?S=B20000 (スパムフィルターに引っかかるためアドレス@を入れています。@を除くこと)

BITMAPINFOHEADER[編集]

Windowsのビットマップで使われる情報ヘッダで、40バイトある。多くのビットマップがこの形式で保存されている。infoヘッダ、V3ヘッダと呼ばれる。

オフセット サイズ 格納する情報 値・備考
0x000e 4 バイト ヘッダサイズ 40
0x0012 4 バイト ビットマップの横幅 単位はピクセル
0x0016 4 バイト ビットマップの縦幅 単位はピクセル
0x001a 2 バイト プレーン数 常に1
0x001c 2 バイト 1ピクセルあたりのビット数 0,1,4,8,16,24,32
0x001e 4 バイト 圧縮形式 0,1,2,3,4,5 ※1
0x0022 4 バイト 画像データサイズ 単位はバイト
0x0026 4 バイト 水平方向の解像度 単位はピクセル/m
0x002a 4 バイト 垂直方向の解像度 単位はピクセル/m
0x002e 4 バイト 使用する色数 ビットマップで実際に使用するカラーパレット内のカラーインデックスの数。
0x0032 4 バイト 重要な色数 ビットマップを表示するために必要なカラーインデックスの数。

参考URL http://msdn.microsoft.com/en-us/library/dd183376(VS.85).aspx

BITMAPINFOHEADER2[編集]

OS/2 V2以降対応した情報ヘッダである。サイズは可変であり、最大64byte。 [1]

オフセット サイズ 格納する情報 値・備考
0x000e 4 バイト ヘッダサイズ 16~64(可変長)
0x0012 4 バイト ビットマップの横幅 単位はピクセル
0x0016 4 バイト ビットマップの縦幅 単位はピクセル
0x001a 2 バイト プレーン数 常に1
0x001c 2 バイト 1ピクセルあたりのビット数 1,4,8,24
0x001e 4 バイト 圧縮形式 0(非圧縮),1(8bit RLE),2(4bit RLE),3(ハフマン符号化、1bit),4(24bit RLE)
0x0022 4 バイト 画像データサイズ 単位はバイト。非圧縮の場合は0を入れても良い
0x0026 4 バイト 水平方向の解像度 単位はピクセル/m
0x002a 4 バイト 垂直方向の解像度 単位はピクセル/m
0x002e 4 バイト 使用する色数 ビットマップで実際に使用するカラーパレット内のカラーインデックスの数。
0x0032 4 バイト 重要な色数 ビットマップを表示するために必要なカラーインデックスの数。
0x0036 2 バイト 解像度の単位 0(ピクセル/m)
0x0038 2 バイト 予約領域 常に0
0x003a 2 バイト 記録方式 0(ボトムアップ)
0x003c 2 バイト ハーフトーンの方式 0(ハーフトーンなし), 1(誤差拡散法), 2(PANDA), 3(Super Sircle)
0x003e 4 バイト ハーフトーン時のパラメータ1
0x0042 4 バイト ハーフトーン時のパラメータ2 誤差拡散法の場合は無視される
0x0046 4 バイト 符号化方式 0(RGB2、RGBQUADに相当), -1(パレット方式)
0x004a 4 バイト 識別子 アプリケーションが独自に使用してもよい領域

BITMAPV4HEADER[編集]

Windows 95、Windows NT 4.0から対応した新しい情報ヘッダ。V4ヘッダと呼ばれる。

オフセット サイズ 格納する情報 値・備考
0x000e 4 バイト ヘッダサイズ (40,) 52,56,60,96,108(可変長)
0x0012 4 バイト ビットマップの横幅 単位はピクセル
0x0016 4 バイト ビットマップの縦幅 単位はピクセル
0x001a 2 バイト プレーン数 常に1
0x001c 2 バイト 1ピクセルあたりのビット数 0,1,4,8,16,24,32
0x001e 4 バイト 圧縮形式 0,1,2,3,4,5 ※1
0x0022 4 バイト 画像データサイズ 単位はバイト
0x0026 4 バイト 水平方向の解像度 単位はピクセル/m
0x002a 4 バイト 垂直方向の解像度 単位はピクセル/m
0x002e 4 バイト 使用する色数 ビットマップで実際に使用するカラーパレット内のカラーインデックスの数。
0x0032 4 バイト 重要な色数 ビットマップを表示するために必要なカラーインデックスの数。
0x0036 4 バイト 赤成分のカラーマスク
0x003a 4 バイト 緑成分のカラーマスク
0x003e 4 バイト 青成分のカラーマスク
0x0042 4 バイト α成分のカラーマスク
0x0046 4 バイト 色空間 0(ヘッダ内で定義)
0x004a 36 バイト CIEXYZTRIPLE構造体
0x006e 4 バイト 赤成分のガンマ値
0x0072 4 バイト 緑成分のガンマ値
0x0076 4 バイト 青成分のガンマ値

参考URL http://msdn.microsoft.com/en-us/library/dd183380(VS.85).aspx

BITMAPV5HEADER[編集]

Windows 98、Windows 2000から対応した新しい情報ヘッダ。V5ヘッダと呼ばれる。

オフセット サイズ 格納する情報 値・備考
0x000e 4 バイト ヘッダサイズ (40,52,56,60,96,108,) 112,120,124(可変長)
0x0012 4 バイト ビットマップの横幅 単位はピクセル
0x0016 4 バイト ビットマップの縦幅 単位はピクセル
0x001a 2 バイト プレーン数 常に1
0x001c 2 バイト 1ピクセルあたりのビット数 0,1,4,8,16,24,32
0x001e 4 バイト 圧縮形式 0,1,2,3,4,5 ※1
0x0022 4 バイト 画像データサイズ 単位はバイト
0x0026 4 バイト 水平方向の解像度 単位はピクセル/m
0x002a 4 バイト 垂直方向の解像度 単位はピクセル/m
0x002e 4 バイト 使用する色数 ビットマップで実際に使用するカラーパレット内のカラーインデックスの数。
0x0032 4 バイト 重要な色数 ビットマップを表示するために必要なカラーインデックスの数。
0x0036 4 バイト 赤成分のカラーマスク
0x003a 4 バイト 緑成分のカラーマスク
0x003e 4 バイト 青成分のカラーマスク
0x0042 4 バイト α成分のカラーマスク
0x0046 4 バイト 色空間 0(ヘッダ内で定義), 0x73524742('sRGB'), 0x57696e20('Win '), 0x4c494e4b('LINK'), 0x4d424544('MBED')
0x006a 36 バイト CIEXYZTRIPLE構造体
0x006e 4 バイト 赤成分のガンマ値 16.16の固定小数点数
0x0072 4 バイト 緑成分のガンマ値 16.16の固定小数点数
0x0076 4 バイト 青成分のガンマ値 16.16の固定小数点数
0x007a 4 バイト レンダリングの意図 1,2,4,8
0x007e 4 バイト プロファイルデータのオフセット 情報ヘッダの先頭アドレスからプロファイルデータの先頭アドレスまでのオフセット。単位はバイト
0x0082 4 バイト プロファイルデータのサイズ 単位はバイト
0x0086 4 バイト 予約領域 常に0

参考URL http://msdn.microsoft.com/en-us/library/dd183381(VS.85).aspx

※1 数字と定義されている圧縮形式の関係は以下の通り

0 - 無圧縮(識別子はBI_RGB)
1 - 8ビット/ピクセル RLE(識別子はBI_RLE8)
2 - 4ビット/ピクセル RLE(識別子はBI_RLE4)
3 - ビットフィールド(識別子はBI_BITFIELDS)
4 - JPEG画像(識別子はBI_JPEG)
5 - PNG画像(識別子はBI_PNG)

カラーマスク[編集]

カラーマスクはビットフィールド形式が使用されているビットマップから各色成分を取り出す際に使用されるデータである。

カラーマスクブロックは、情報ヘッダがINFOヘッダかつビットフィールド形式が使用されている場合のみ存在する。 V4、V5ヘッダの場合は、ヘッダ内に値が格納されるためこのブロックは存在しない。カラーマスクは赤成分、緑成分、青成分の順で書かれており、それぞれ4byte、合計12byteである。α成分のカラーマスクは存在しない。

1ピクセルあたりのビット数とカラーマスクの組み合わせが以下である場合は、圧縮形式を非圧縮に設定し、カラーマスクブロックを省略できる。

  16bit 32bit
赤成分のカラーマスク 0x00007C00 0x00FF0000
緑成分のカラーマスク 0x000003E0 0x0000FF00
青成分のカラーマスク 0x0000001F 0x000000FF

カラーパレット[編集]

このブロックは、画像内で使用される色を定義している。上述の通り、ビットマップ画像はピクセルごとに保存されている。各ピクセルは、1バイト以上を使用して値を保持している。したがって、各値と実際の色の関係を、アプリケーションに教えることがカラーパレットの目的である。

典型的なビットマップファイルはRGBカラーモデルを使用している。このモデルにおいて、色は (R)、 (G)、 (B) のそれぞれの強さ (0-255) で表される。

RGBTRIPLE[編集]

1色3バイトで表記する形式

バイト数 情報 値・備考
1 byte 0-255
1 byte 0-255
1 byte 0-255

RGBQUAD[編集]

1色4バイトで表記する形式、OS/2ビットマップにおけるRGB2もこちらに相当する。

バイト数 情報 値・備考
1 byte 0-255
1 byte 0-255
1 byte 0-255
1 byte 予約領域

ビットマップデータ[編集]

このブロックは、イメージを各ピクセルごとに記述する。ピクセルは通常、左下から右下へ、これを下から上に向かって保存する。各ピクセルは1バイト以上で記述されている。直接RGBデータが置かれる場合のデータ順は、上項カラーパレットに準ずる。水平方向のバイト数が4倍数ではないときは、Null (0x00) で埋めて4の倍数にする。

BMPを取り扱うプログラムライブラリ[編集]

プログラムでBMP画像を平易に扱うためのライブラリも数多く存在している。

ビットマップデータを管理するオブジェクトハンドル。BMP形式画像をファイルやリソースから読み込んでHBITMAPを生成することのできる各種C言語形式関数が用意されている。Windowsデスクトップアプリケーション専用。
マイクロソフトが提供している開発環境であるVisual C++に付属する、ビットマップ操作クラス。Win32 APIのラッパー。Windowsデスクトップアプリケーション専用。
マイクロソフトが提供している開発環境であるVisual C++に付属する、ビットマップ操作クラス。Win32 APIおよびGDI+のラッパー。Windowsデスクトップアプリケーション専用。
  • GDI+, Gdiplus::Bitmapクラス[6]
Windows SDKに付属する、C++言語専用のビットマップ操作クラス。Windowsデスクトップアプリケーション専用。
COMベースの画像ライブラリ。Windowsデスクトップアプリケーション/Windowsストアアプリから利用可能。
GDI+のマネージラッパー。Windowsデスクトップアプリケーション専用。
WICのマネージラッパー。Windowsデスクトップアプリケーション/Windowsストアアプリから利用可能。

サードパーティ製のライブラリに関しての各詳細は、外部リンクの項に記載している。

脚注[編集]

[ヘルプ]

関連項目[編集]

外部リンク[編集]

  • libbmp24 C++で書かれたオープンソースライブラリ。1つのヘッダーファイルのみで構成されており組み込みが容易。
  • Imager Perl用モジュール。ほとんどの画像形式に対応しており、他ライブラリとの依存も少なく高速に動作する画像ライブラリ。