Loading AI tools
マイクロソフトとIBMがWindowsとOS/2にわかれる前のOSを共同で開発していた頃に作られた画像ファイル形式 ウィキペディアから
BMP(ビーエムピー、Microsoft Windows Bitmap Image)またはDIB(ディーアイビー、Device Independent Bitmap、デバイス独立ビットマップ)は、マイクロソフトとIBMがWindowsとOS/2にわかれる前のOSを共同で開発していた頃に作られた画像ファイル形式。圧縮の方法についても定義されているが、Windowsが標準では無圧縮のファイルを生成するため、他のアプリケーションにおいても無指定時は、圧縮はされていない場合が多い。
ファイル形式の細部の変更が何度か行われており、その結果としてWindowsとOS/2で多少ファイル形式が異なることがある。
機械独立のファイル形式として設計されたため、実際に存在する画像表示装置(ディスプレイ)や印刷装置(プリンター)が、画像を上方から処理するものがほぼ全てであるにもかかわらず、幾何学的なX軸、Y軸方向に座標を指定する形式となっている。その結果、画像を下から上に向かって記録するボトムアップ形式 (bottom-up) となっていることが特徴であるが、後に高さに負の値を指定することでその他大多数の画像ファイル形式と同じように画像を上から下へ向かって記録するトップダウン形式 (top-down) を使用することもできるようになった。しかし互換性の面からProgramming Windowsではトップダウン形式のビットマップの作成を推奨していない。また、トップダウン形式では後述の圧縮をすることができない。
なお、ビットマップという呼称は画像データの表現方式のひとつであり、本項で述べているマイクロソフト独自のファイル形式を必ずしも指すわけではない[4]。
ビットマップファイルは、以下のブロックに分かれている。
1.1 | 2.x |
---|---|
BITMAPFILEHEADER構造体 | BITMAPFILEHEADER2構造体 |
BITMAPCOREHEADER構造体 | BITMAPINFOHEADER2構造体 |
カラーパレット(RGBTRIPLE構造体) | カラーパレット(RGB2構造体) |
画像データ |
3.0以降 | 95以降 | 98以降 |
---|---|---|
BITMAPFILEHEADER構造体 | ||
BITMAPINFOHEADER構造体 | BITMAPV4HEADER構造体 | BITMAPV5HEADER構造体 |
カラーマスク
(ビットフィールド形式のみ) |
カラーパレット(RGBQUAD構造体) | |
カラーパレット(RGBQUAD構造体) | 画像データ | |
画像データ | N/A | カラープロファイル |
14バイトからなる、ビットマップファイルのファイルヘッダである。
参考URL
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 | ホットスポットy | ポインタのホットスポットのy座標 | |
0x000a | 4バイト | オフセット | ファイルヘッダの先頭アドレスからビットマップデータの先頭アドレスまでのオフセット。単位はバイト。 |
このブロックは、アプリケーションが画像を描画するための画像の詳細な情報が書かれており、14バイト目から始まる。
14-17 (eh-11h) バイト目は、ヘッダのサイズが書かれている。最大値は、
OS/2のビットマップで使われる情報ヘッダで、12バイトある。coreヘッダと呼ばれる。
オフセット | サイズ | 格納する情報 | 値・備考 |
---|---|---|---|
0x000e | 4バイト | ヘッダサイズ | 12 |
0x0012 | 2バイト | ビットマップの横幅 | 単位はピクセル |
0x0014 | ビットマップの縦幅 | ||
0x0016 | プレーン数 | 常に1 | |
0x0018 | 1ピクセルあたりのビット数 | 1,4,8,24 |
参考URL
Windowsのビットマップで使われる情報ヘッダで、40バイトある。多くのビットマップがこの形式で保存されている。infoヘッダと呼ばれる。
オフセット | サイズ | 格納する情報 | 値・備考 |
---|---|---|---|
0x000e | 4バイト | ヘッダサイズ | 40 |
0x0012 | ビットマップの横幅 | 単位はピクセル | |
0x0016 | ビットマップの縦幅 | 単位はピクセル。値が負の場合はトップダウン画像となる | |
0x001a | 2バイト | プレーン数 | 常に1 |
0x001c | 1ピクセルあたりのビット数 | 0,1,4,8,16,24,32 | |
0x001e | 4バイト | 圧縮形式 | 0,1,2,3,4,5 ※1 |
0x0022 | 画像データサイズ | 単位はバイト | |
0x0026 | 水平方向の解像度 | 単位はピクセル/m | |
0x002a | 垂直方向の解像度 | ||
0x002e | 使用する色数 | ビットマップで実際に使用するカラーパレット内のカラーインデックスの数。 | |
0x0032 | 重要な色数 | ビットマップを表示するために必要なカラーインデックスの数。 |
参考URL
OS/2 V2以降対応した情報ヘッダである。サイズは可変であり、最大64バイト。Windowsでは対応していない。
オフセット | サイズ | 格納する情報 | 値・備考 |
---|---|---|---|
0x000e | 4バイト | ヘッダサイズ | 16~64(可変長) |
0x0012 | ビットマップの横幅 | 単位はピクセル | |
0x0016 | ビットマップの縦幅 | ||
0x001a | 2バイト | プレーン数 | 常に1 |
0x001c | 1ピクセルあたりのビット数 | 1,4,8,24 | |
0x001e | 4バイト | 圧縮形式 | 0(非圧縮),1(8bit RLE),2(4bit RLE),3(1bitハフマン符号圧縮),4(24bit RLE) |
0x0022 | 画像データサイズ | 単位はバイト。非圧縮の場合は0を入れても良い | |
0x0026 | 水平方向の解像度 | 単位は「解像度の単位」で指定される | |
0x002a | 垂直方向の解像度 | ||
0x002e | 使用する色数 | ビットマップで実際に使用するカラーパレット内のカラーインデックスの数。 | |
0x0032 | 重要な色数 | ビットマップを表示するために必要なカラーインデックスの数。 | |
0x0036 | 2バイト | 解像度の単位 | 0(ピクセル/m) |
0x0038 | 予約領域 | 常に0 | |
0x003a | 記録方式 | 0(ボトムアップ) | |
0x003c | ハーフトーンの方式 | 0(ハーフトーンなし), 1(誤差拡散法), 2(PANDA), 3(Super Circle) | |
0x003e | 4バイト | ハーフトーン時のパラメータ1 | |
0x0042 | ハーフトーン時のパラメータ2 | 誤差拡散法の場合は無視される | |
0x0046 | 符号化方式 | 0(RGB2、RGBQUADに相当) | |
0x004a | 識別子 | アプリケーションが独自に使用してもよい領域 |
各フィールドの解説を、infoヘッダとの比較を交えながら行う
この節の加筆が望まれています。 |
Adobe Photoshopで使用されていた情報ヘッダ。infoヘッダにRGBとα成分のカラーマスクを取り込んだ56バイトのヘッダで、便宜上V3ヘッダと呼ばれる。 また、infoヘッダにRGB成分のカラーマスクを取り込んだ52バイトの情報ヘッダも存在し、こちらは便宜上V2ヘッダと呼ばれる。
Adobe社によると、V2ヘッダ及びV3ヘッダの仕様は、過去にMicrosoftから取り寄せた文書に記載されていたそうである[5]。
Windows 95、Windows NT 4.0から対応した情報ヘッダ。V4ヘッダと呼ばれる。
オフセット | サイズ | 格納する情報 | 値・備考 |
---|---|---|---|
0x000e | 4バイト | ヘッダサイズ | 108 |
0x0012 | ビットマップの横幅 | infoヘッダと同等 | |
0x0016 | ビットマップの縦幅 | ||
0x001a | 2バイト | プレーン数 | |
0x001c | 1ピクセルあたりのビット数 | ||
0x001e | 4バイト | 圧縮形式 | |
0x0022 | 画像データサイズ | ||
0x0026 | 水平方向の解像度 | ||
0x002a | 垂直方向の解像度 | ||
0x002e | 使用する色数 | ||
0x0032 | 重要な色数 | ||
0x0036 | 赤成分のカラーマスク | ||
0x003a | 緑成分のカラーマスク | ||
0x003e | 青成分のカラーマスク | ||
0x0042 | α成分のカラーマスク | ||
0x0046 | 色空間 | 0(ヘッダ内で定義) | |
0x004a | 36バイト | CIEXYZTRIPLE構造体 | 色空間が0の場合のみ有効 |
0x006e | 4バイト | 赤成分のガンマ値 | 色空間が0の場合のみ有効 16.16の固定小数点数 |
0x0072 | 緑成分のガンマ値 | ||
0x0076 | 青成分のガンマ値 |
参考URL
Windows 98、Windows 2000から対応した情報ヘッダ。V5ヘッダと呼ばれる。
オフセット | サイズ | 格納する情報 | 値・備考 |
---|---|---|---|
0x000e | 4バイト | ヘッダサイズ | 124 |
0x0012 | ビットマップの横幅 | infoヘッダと同等 | |
0x0016 | ビットマップの縦幅 | ||
0x001a | 2バイト | プレーン数 | |
0x001c | 1ピクセルあたりのビット数 | ||
0x001e | 4バイト | 圧縮形式 | |
0x0022 | 画像データサイズ | ||
0x0026 | 水平方向の解像度 | ||
0x002a | 垂直方向の解像度 | ||
0x002e | 使用する色数 | ||
0x0032 | 重要な色数 | ||
0x0036 | 赤成分のカラーマスク | V4ヘッダと同等 | |
0x003a | 緑成分のカラーマスク | ||
0x003e | 青成分のカラーマスク | ||
0x0042 | α成分のカラーマスク | ||
0x0046 | 色空間 | 0(ヘッダ内で定義), 0x73524742('sRGB'), 0x57696e20('Win '), 0x4c494e4b('LINK'), 0x4d424544('MBED') | |
0x004a | 36バイト | CIEXYZTRIPLE構造体 | V4ヘッダと同等 |
0x006e | 4バイト | 赤成分のガンマ値 | |
0x0072 | 緑成分のガンマ値 | ||
0x0076 | 青成分のガンマ値 | ||
0x007a | レンダリングの意図 | 1,2,4,8 | |
0x007e | プロファイルデータのオフセット | 情報ヘッダの先頭アドレスからプロファイルデータの先頭アドレスまでのオフセット。単位はバイト | |
0x0082 | プロファイルデータのサイズ | 単位はバイト | |
0x0086 | 予約領域 | 常に0 |
参考URL
過去に、EGAやVGAディスプレイカードで使われていた概念で、現在は全く使われない。
この概念が使われていた頃は、実際の色深度を「1ピクセルあたりのビット数×プレーン数」で算出する必要があった。
※1 数値と定義されている圧縮形式の関係は以下の通り[6]
上記以外の圧縮形式は以下の通り
# | OS・環境 | 識別子 | |
---|---|---|---|
3 | 1ビットハフマン符号化 | OS/2 2.x | BCA_HUFFMAN1D |
4 | 24ビット/ピクセル RLE | BCA_RLE24 | |
6 | アルファチャンネル付きビットフィールド | Windows CE 5.0 | BI_ALPHABITFIELDS |
7 | 詳細不明 | Windows CE | BI_FOURCC |
11 | 無圧縮CMYK | ? | BI_CMYK |
12 | 8ビット/ピクセル RLE CMYK | BI_CMYKRLE8 | |
13 | 4ビット/ピクセル RLE CMYK | BI_CMYKRLE4 | |
0x8000 | これは画像の回転角が送信先と同じであるというフラグ情報であり、圧縮形式ではない。 | Windows CE 5.0 | BI_SRCPREROTATE |
FourCCによる指定 | DirectXなど |
画像の表示に適したデバイスの解像度を指定する。この値を設定することで、例えばソフトウェアが画面の解像度に合った最適なサイズの画像を選択できるようになる。
V4ヘッダで、'Win 'と'sRGB'が使用できるというドキュメントが存在する。
カラーマスクはビットフィールド形式が使用されているビットマップから各色成分を取り出す際に使用されるデータである。赤成分、緑成分、青成分の順で書かれており、それぞれ4バイト、合計12バイトである。Windows CEで圧縮形式に「アルファチャンネル付きビットフィールド」を使用した場合は、この後ろにα成分のカラーマスクが置かれ合計16バイトになる。
カラーマスクブロックは、情報ヘッダがINFOヘッダかつビットフィールド形式が使用されている場合に必ず存在する。V4、V5ヘッダの場合は、ヘッダ内に値が格納されるためこのブロックは置く必要がない。
1ピクセルあたりのビット数とカラーマスクの組み合わせが以下である場合は、圧縮形式を非圧縮に設定し、カラーマスクブロックを省略できる。
カラーマスク | 16ビット | 32ビット |
---|---|---|
赤成分 | 0x00007C00 | 0x00FF0000 |
緑成分 | 0x000003E0 | 0x0000FF00 |
青成分 | 0x0000001F | 0x000000FF |
α成分 | 0x00000000 | 0x00000000 |
このブロックは、画像内で使用される色を定義している。上述の通り、ビットマップ画像はピクセルごとに保存されている。各ピクセルは、1バイト以上を使用して値を保持している。したがって、各値と実際の色の関係を、アプリケーションに教えることがカラーパレットの目的である。
典型的なビットマップファイルはRGBカラーモデルを使用している。このモデルにおいて、色は赤 (R)、緑 (G)、青 (B) のそれぞれの強さ (0-255) で表される。
1色3バイトで表記する形式。情報ヘッダがcoreヘッダの場合のみ使用される。
バイト数 | 情報 | 値・備考 |
---|---|---|
1バイト | 青 | 0-255 |
緑 | ||
赤 |
参考:
1色4バイトで表記する形式、OS/2ビットマップにおけるRGB2もこちらに相当する。
バイト数 | 情報 | 値・備考 |
---|---|---|
1バイト | 青 | 0-255 |
緑 | ||
赤 | ||
予約領域 |
参考:
このブロックは、イメージを各ピクセルごとに記述する。ピクセルは通常、左下から右下へ、これを下から上に向かって保存する。各ピクセルは1バイト以上で記述されている。直接RGBデータが置かれる場合のデータ順は、上項カラーパレットに準ずる。水平方向のバイト数が4の倍数ではないときは、0x00で埋めて4の倍数にする。
このブロックは、情報ヘッダの「色空間」が'LINK'の場合はカラープロファイルデータのファイルパスが、'MBED'の場合はデータそのものが格納される。 ファイルヘッダの「オフセット」の値によってはビットマップデータよりも前に格納することも出来る。
プログラムでBMP画像を平易に扱うためのライブラリも数多く存在している。
サードパーティ製のライブラリに関しての各詳細は、外部リンクの項に記載している。
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.