Windows bitmap拡張子.bmp, .dib[1][2]
MIMEタイプimage/bmp[3]
タイプコード
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.12.x 3.0以降95以降98以降 (ビットフィールド形式のみ)カラーパレット(RGBQUAD構造体) 14バイトからなる、ビットマップファイルのファイルヘッダである。 オフセットサイズ格納する情報値・備考 参考URL OS/2 2.xで使用されたファイルヘッダ。BITMAPFILEHEADERを拡張したものだがサイズは同じ。 オフセットサイズ格納する情報値・備考 このブロックは、アプリケーションが画像を描画するための画像の詳細な情報が書かれており、14バイト目から始まる。 14-17 (eh-11h) バイト目は、ヘッダのサイズが書かれている。最大値は、 OS/2のビットマップで使われる情報ヘッダで、12バイトある。coreヘッダと呼ばれる。 オフセットサイズ格納する情報値・備考 参考URL (スパムフィルターに引っかかるためアドレスに@を入れています。@を除くこと) Windowsのビットマップで使われる情報ヘッダで、40バイトある。多くのビットマップがこの形式で保存されている。infoヘッダと呼ばれる。 オフセットサイズ格納する情報値・備考 参考URL OS/2 V2以降対応した情報ヘッダである。サイズは可変であり、最大64バイト。Windowsでは対応していない。 ⇒[1] オフセットサイズ格納する情報値・備考 各フィールドの解説を、infoヘッダとの比較を交えながら行う
ファイル構造
ファイルヘッダ
ビットマップファイルについての一般的な情報が格納されている。
情報ヘッダ
ビットマップイメージについての詳細な情報が格納されている。
カラーマスク
ビットフィールド形式のビットマップで使用されるデータが格納される。
カラーパレット
インデックスカラービットマップの場合に使用される色の定義が格納されている。ダイレクトカラー
ビットマップデータ
実際のイメージがピクセルごとに格納されている。
カラープロファイル
ICCプロファイルデータそのものか、プロファイルデータのファイルパスが格納される。Diag. 1 ? Windows BMP形式の画像の構造
主な構造
OS/2
BITMAPFILEHEADER構造体BITMAPFILEHEADER2構造体
BITMAPCOREHEADER構造体BITMAPINFOHEADER2構造体
カラーパレット(RGBTRIPLE構造体)カラーパレット(RGB2構造体)
画像データ
Windows
BITMAPFILEHEADER構造体
BITMAPINFOHEADER構造体BITMAPV4HEADER構造体BITMAPV5HEADER構造体
カラーマスク
カラーパレット(RGBQUAD構造体)画像データ
画像データN/Aカラープロファイル
ファイルヘッダ
BITMAPFILEHEADER
0x00002バイトファイルタイプ常にBM (0x42, 0x4d)(マジックナンバー)
0x00024バイトファイルサイズビットマップファイルのサイズを格納する(単位はバイト)。
0x00062バイト予約領域1常に0
0x0008予約領域2
0x000a4バイトオフセットファイルヘッダの先頭アドレスからビットマップデータの先頭アドレスまでのオフセット(単位はバイト)。
BITMAPFILEHEADER (wingdi.h) - Win32 apps 。Microsoft Docs
BITMAPFILEHEADER2
0x00002バイトファイルタイプBM (0x42, 0x4d)(ビットマップ)
IC (0x49, 0x43)(モノクロアイコン)
CI (0x43, 0x49)(カラーアイコン)
PT (0x50, 0x54)(モノクロポインタ)
CP (0x43, 0x50)(カラーポインタ)
0x00024バイトヘッダサイズファイルヘッダと情報ヘッダの合計サイズを格納する。単位はバイト。
0x00062バイトホットスポットxポインタのホットスポットのx座標
0x0008ホットスポットyポインタのホットスポットのy座標
0x000a4バイトオフセットファイルヘッダの先頭アドレスからビットマップデータの先頭アドレスまでのオフセット。単位はバイト。
モノクロアイコン、モノクロポインタは1bitモノクロ画像のみサポートしている。
カラーアイコン、カラーポインタは1ファイル内に透過位置を示す1bitモノクロ画像とカラー情報を表す画像を併せ持つ特殊なファイル構造をしている。
情報ヘッダ
40 - Windows V3
108 - Windows V4
124 - Windows V5
12 - OS/2 V1
64 - OS/2 V2
BITMAPCOREHEADER
0x000e4バイトヘッダサイズ12
0x00122バイトビットマップの横幅単位はピクセル
0x0014ビットマップの縦幅
0x0016プレーン数常に1
0x00181ピクセルあたりのビット数1,4,8,24
BITMAPCOREHEADER (wingdi.h) - Win32 apps 。Microsoft Docs
⇒http://www.programmers@heaven.com/mb/graphics/148346/152845/re-planes/?S=B20000
BITMAPINFOHEADER
0x000e4バイトヘッダサイズ40
0x0012ビットマップの横幅単位はピクセル
0x0016ビットマップの縦幅単位はピクセル。値が負の場合はトップダウン画像となる
0x001a2バイトプレーン数常に1
0x001c1ピクセルあたりのビット数0,1,4,8,16,24,32
0x001e4バイト圧縮形式0,1,2,3,4,5 ※1
0x0022画像データサイズ単位はバイト
0x0026水平方向の解像度単位はピクセル/m
0x002a垂直方向の解像度
0x002e使用する色数ビットマップで実際に使用するカラーパレット内のカラーインデックスの数。
0x0032重要な色数ビットマップを表示するために必要なカラーインデックスの数。
BITMAPINFOHEADER (wingdi.h) 。Microsoft Docs
BITMAPINFOHEADER2
0x000e4バイトヘッダサイズ16?64(可変長)
0x0012ビットマップの横幅単位はピクセル
0x0016ビットマップの縦幅
0x001a2バイトプレーン数常に1
0x001c1ピクセルあたりのビット数1,4,8,24
0x001e4バイト圧縮形式0(非圧縮),1(8bit RLE),2(4bit RLE),3(1bitハフマン符号圧縮),4(24bit RLE)
0x0022画像データサイズ単位はバイト。非圧縮の場合は0を入れても良い
0x0026水平方向の解像度単位は「解像度の単位」で指定される
0x002a垂直方向の解像度
0x002e使用する色数ビットマップで実際に使用するカラーパレット内のカラーインデックスの数。
0x0032重要な色数ビットマップを表示するために必要なカラーインデックスの数。
0x00362バイト解像度の単位0(ピクセル/m)
0x0038予約領域常に0
0x003a記録方式0(ボトムアップ)
0x003cハーフトーンの方式0(ハーフトーンなし), 1(誤差拡散法), 2(PANDA), 3(Super Circle)
0x003e4バイトハーフトーン時のパラメータ1
0x0042ハーフトーン時のパラメータ2誤差拡散法の場合は無視される
0x0046符号化方式0(RGB2、RGBQUADに相当)
0x004a識別子アプリケーションが独自に使用してもよい領域
各フィールドの詳細
ヘッダサイズ
16?64の可変長である。64未満の場合、後ろは0で埋められているとして扱われる。40の場合はinfoヘッダとほぼ同じとして扱える。
ビットマップの縦幅
infoヘッダではトップダウンとして扱われる負の値(-1?-2147483648)が、こちらでは正の値(4294967295?2147483648)として扱われる。記録する方向は「記録方式」で指定できるが、デフォルトの「ボトムアップ」以外は用意されなかった。
圧縮形式
infoヘッダとは3?4の圧縮形式が異なるが、ビット深度を求めることにより判別は可能である。
水平方向の解像度
垂直方向の解像度
単位は「解像度の単位」で指定するが、デフォルトの「ピクセル/m」以外は用意されなかった。
符号化方式
カラーパレットの形式を指定する。ただし、デフォルトの「RGB2(RGBQUADと同等)」以外は用意されなかった。.mw-parser-output .ambox{border:1px solid #a2a9b1;border-left:10px solid #36c;background-color:#fbfbfb;box-sizing:border-box}.mw-parser-output .ambox+link+.ambox,.mw-parser-output .ambox+link+style+.ambox,.mw-parser-output .ambox+link+link+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+style+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+link+.ambox{margin-top:-1px}html body.mediawiki .mw-parser-output .ambox.mbox-small-left{margin:4px 1em 4px 0;overflow:hidden;width:238px;border-collapse:collapse;font-size:88%;line-height:1.25em}.mw-parser-output .ambox-speedy{border-left:10px solid #b32424;background-color:#fee7e6}.mw-parser-output .ambox-delete{border-left:10px solid #b32424}.mw-parser-output .ambox-content{border-left:10px solid #f28500}.mw-parser-output .ambox-style{border-left:10px solid #fc3}.mw-parser-output .ambox-move{border-left:10px solid #9932cc}.mw-parser-output .ambox-protection{border-left:10px solid #a2a9b1}.mw-parser-output .ambox .mbox-text{border:none;padding:0.25em 0.5em;width:100%;font-size:90%}.mw-parser-output .ambox .mbox-image{border:none;padding:2px 0 2px 0.5em;text-align:center}.mw-parser-output .ambox .mbox-imageright{border:none;padding:2px 0.5em 2px 0;text-align:center}.mw-parser-output .ambox .mbox-empty-cell{border:none;padding:0;width:1px}.mw-parser-output .ambox .mbox-image-div{width:52px}html.client-js body.skin-minerva .mw-parser-output .mbox-text-span{margin-left:23px!important}@media(min-width:720px){.mw-parser-output .ambox{margin:0 10%}}
Size:46 KB
出典: フリー百科事典『ウィキペディア(Wikipedia)』
担当:undef