ア | イ | ウ | エ | オ |
カ | キ | ク | ケ | コ |
サ | シ | ス | セ | ソ |
タ | チ | ツ | テ | ト |
ナ | ニ | ヌ | ネ | ノ |
ハ | ヒ | フ | ヘ | ホ |
マ | ミ | ム | メ | モ |
ヤ | ユ | ヨ | ||
ラ | リ | ル | レ | ロ |
ワ | ヰ | ヴ | ヱ | ヲ |
ン |
A | B | C | D | E |
F | G | H | I | J |
K | L | M | N | O |
P | Q | R | S | T |
U | V | W | X | Y |
Z | 数字 | 記号 |
Microsoft WindowsやOS/2の標準として使われている画像ファイルのフォーマットの一つ。
BMPファイルは、次の構造を取る。
整数はリトルエンディアンで記述されている。
なお、注記がないものはMicrosoft Windowsのビットマップ形式について記している。OS/2 1.xはWindowsの構造と同じ(情報ヘッダーはBITMAPCOREHEADER構造体)だが、新しいもの(OS/2 2.0以降)は構造が変わっており互換性がないので注意が必要である。
ファイルヘッダーは、次の情報からなる。
サイズ | 内容 | 備考 |
---|---|---|
2バイト | マジックナンバー | "BM" |
4バイト | ビットマップのサイズ | バイト単位 |
2バイト | 予約済み領域1 | 0 |
2バイト | 予約済み領域2 | 0 |
4バイト | イメージデータの開始地点 | 開始位置(バイト) |
ビットマップのサイズが32ビットという仕様のため、4Giバイトを超えるビットマップを作ることは(厳密なエンコーダーには)できない。なお、このビットマップのサイズは信用してはならない。
画像データは、特別な事情がなければヘッダーの直後から始まるので、「イメージデータの開始地点」は通常はファイルヘッダー(14バイト)と情報ヘッダー(BITMAPINFOHEADER構造体なら40バイト)の合計値(この場合は54)がそのまま格納される。
OS/2 1.xで採用されているもの。この構造体は、次の情報からなる。
サイズ | 内容 | 備考 |
---|---|---|
4バイト | 構造体のサイズ | 12 |
2バイト | 横ピクセル数 | ピクセル単位 |
2バイト | 縦ピクセル数 | ピクセル単位 |
2バイト | イメージのプレーン数 | 1 |
2バイト | ピクセルあたりのビット数 | 1、4、8、24 |
この構造体を用いたBMPは、縦横のサイズの上限はそれぞれ65535ピクセルと他のタイプよりも小さい。
また、扱えるピクセルあたりのビット数も1・4・8・24に限られるので注意が必要である。
Windows 3.0以降で標準的に採用されているもの。Windowsのペイントで出力されるBMPの情報ヘッダーであり、BMPの標準ともいえる。
この構造体は、次の情報からなる。
サイズ | 名称 | 内容 | 備考 |
---|---|---|---|
4バイト | biSize | 構造体のサイズ | 40 |
4バイト | biWidth | 横ピクセル数 | ピクセル単位 |
4バイト | biHeight | 縦ピクセル数 | ピクセル単位 |
2バイト | biPlanes | イメージのプレーン数 | 1 |
2バイト | biBitCount | ピクセルあたりのビット数 | 0、1、4、8、16、24、32 |
4バイト | biCompression | 圧縮方式 | 方式番号 |
4バイト | biSizeImage | イメージデータのサイズ | 無圧縮なら0でもよい |
4バイト | biXPelsPerMeter | 水平解像度 | 1mあたりのピクセル数 |
4バイト | biYPelsPerMeter | 垂直解像度 | 1mあたりのピクセル数 |
4バイト | biClrUsed | 用いる色の数 | 0ならピクセルあたりのビット数で表わせる最大色数 |
4バイト | biClrImportant | 表示に必要な色の数 | 0なら全部必要 |
ピクセルあたりのビット数は0・1・4・8・16・24・32である。もし0の場合、中身はJPEGかPNGである。この機能はWindows 98以降で採用されている。
圧縮は、使えるピクセルあたりのビット数が限定されている。具体的にはランレングス圧縮なら4か8、ビットフィールド付き非圧縮形式なら16か32である。JPEG・PNGなら0と決まっている。そのため、24ビットBMPならここは必ず0となる。
用いる色の数は、16ビット以上なら基本的に0にする。さもないと、後でカラーパレットを書かねばならなくなる。
上から下へ向かうときは高さをマイナス1倍することにより表現する(トップダウン、後述)。
Windows 95・Windows NT 4.0から導入された、新しい構造体である。
この構造体は構造体のサイズは最大108。もし108より小さいならば後ろが削られる。この値は40より大きい(40のときはBITMAPINFOHEADER構造体と同じ)。
この構造体は、次の情報からなる。
サイズ | 内容 | 備考 |
---|---|---|
4バイト | 構造体のサイズ | 108 |
4バイト | 横ピクセル数 | ピクセル単位 |
4バイト | 縦ピクセル数 | ピクセル単位 |
2バイト | イメージのプレーン数 | 1 |
2バイト | ピクセルあたりのビット数 | 0、1、4、8、16、24、32 |
4バイト | 圧縮方式 | 方式番号 |
4バイト | イメージデータのサイズ | 無圧縮なら0でもよい |
4バイト | 水平解像度 | 1mあたりのピクセル数 |
4バイト | 垂直解像度 | 1mあたりのピクセル数 |
4バイト | 用いる色の数 | 0ならピクセルあたりのビット数で表わせる最大色数 |
4バイト | 表示に必要な色の数 | 0なら全部必要 |
4バイト | 赤成分のカラーマスク | |
4バイト | 緑成分のカラーマスク | |
4バイト | 青成分のカラーマスク | |
4バイト | αチャンネルのマスク | |
4バイト | 色空間タイプ | V4タイプではLCS_CALIBRATED_RGBのみ対応 |
12バイト | CIEXYZ座標 赤 | 2.30形式の固定小数点が3つ(x,y,z) |
12バイト | CIEXYZ座標 緑 | 2.30形式の固定小数点が3つ(x,y,z) |
12バイト | CIEXYZ座標 青 | 2.30形式の固定小数点が3つ(x,y,z) |
4バイト | 赤 ガンマ値 | |
4バイト | 緑 ガンマ値 | |
4バイト | 青 ガンマ値 |
全要素が揃っている場合、ビットフィールドと同じ情報がもう出尽くしているため、16ビットBMP・32ビットBMPで圧縮方式は基本的に0である。
この構造体はWindows 98以降で導入された。
この構造体は構造体のサイズは最大124。もし124より小さいならば後ろが削られる。この値は40より大きい(40のときはBITMAPINFOHEADER構造体と同じ)。
この構造体は、次の情報からなる。
サイズ | 内容 | 備考 |
---|---|---|
4バイト | 構造体のサイズ | 124 |
4バイト | 横ピクセル数 | ピクセル単位 |
4バイト | 縦ピクセル数 | ピクセル単位 |
2バイト | イメージのプレーン数 | 1 |
2バイト | ピクセルあたりのビット数 | 0、1、4、8、16、24、32 |
4バイト | 圧縮方式 | 方式番号 |
4バイト | イメージデータのサイズ | 無圧縮なら0でもよい |
4バイト | 水平解像度 | 1mあたりのピクセル数 |
4バイト | 垂直解像度 | 1mあたりのピクセル数 |
4バイト | 用いる色の数 | 0ならピクセルあたりのビット数で表わせる最大色数 |
4バイト | 表示に必要な色の数 | 0なら全部必要 |
4バイト | 赤成分のカラーマスク | |
4バイト | 緑成分のカラーマスク | |
4バイト | 青成分のカラーマスク | |
4バイト | αチャンネルのマスク | |
4バイト | 色空間タイプ | V4タイプではLCS_CALIBRATED_RGBのみ対応 |
12バイト | CIEXYZ座標 赤 | 2.30形式の固定小数点が3つ(x,y,z) |
12バイト | CIEXYZ座標 緑 | 2.30形式の固定小数点が3つ(x,y,z) |
12バイト | CIEXYZ座標 青 | 2.30形式の固定小数点が3つ(x,y,z) |
4バイト | 赤 ガンマ値 | |
4バイト | 緑 ガンマ値 | |
4バイト | 青 ガンマ値 | |
4バイト | 色空間のタイプ | "LINK"、"MBED" |
4バイト | 色空間プロフィールオフセット | |
4バイト | プロフィールサイズ | |
4バイト | 予約済み領域 | 0 |
全要素が揃っている場合、ビットフィールドと同じ情報がもう出尽くしているため、16ビットBMP・32ビットBMPで圧縮方式は基本的に0である。
ビットフィールドは、次の全ての条件を満たす場合にのみ存在する。
16ビット時はRGB555、32ビット時RGB888のときは圧縮タイプを0にして、このフィールドを省略できる。
16ビット時のRGB555とは、カラーマスクが次の値である。
32ビット時のRGB888とは、カラーマスクが次の値である。
これは、RGBの各ビットマスクをそれぞれ4バイト整数で順に表現するだけである。
例えば16ビットでRGB565ならR部分が0x0000f800、G部分が0x000007e0、B部分が0x0000001fである。
カラーパレットは、次の条件のいずれか一方または両方を満たす場合に存在する。
COREタイプのときは、B成分の値、G成分の値、R成分の値(それぞれ1バイトの整数)の順に並ぶ必要な数の色(1ビットなら2色、4ビットなら16色、8ビットなら256色)を列挙する。
それ以外では、B成分の値、G成分の値、R成分の値、予約済み部分(必ず0)(それぞれ1バイトの整数)の順に並ぶ必要な色の値(指定されていなければ1ビットなら2色、4ビットなら16色、8ビットなら256色、指定されていればその色数)を列挙する。
1行ごとに原則下から上に向かって並ぶ。ただしBITMAPINFOHEADER構造体以上の構造体を情報ヘッダーに持ち、なおかつ高さの値が負の時は、上から下に並ぶ。
各行はピクセルデータが並んでいる。もし各行が4バイトの倍数でない場合は余ったビットに0を格納する。
各ピクセルのデータはビット数が1・4・8のときはパレット方式、16・32のときはビットフィールド方式、24のときはB成分・G成分・R成分がそれぞれ1バイトずつ並ぶカラータイプ方式である。
BITMAPINFOHEADERなどにある圧縮方式を表わす番号欄は、次のいずれかが指定される。
BI_RGB (0)
BI_RLE8 (1)
BI_RLE4 (2)
BI_BITFIELDS (3)
BI_JPEG (4)
BI_PNG (5)
一般的な無圧縮は0である。ランレングス圧縮(RLE)は、4ビットカラー用が2、8ビットカラー用が1、となる。
3つまりBI_BITFIELDSの場合、圧縮はされていないがカラーマスクが設定されている。16ビットカラーまたは32ビットカラーの場合のみ有効である。
これら以外では、FOURCCと呼ばれる4バイトの文字列によって種別を特定する。
通常のBMPは、左から右、下から上に向かって保存されており、これをボトムアップDIBという。
biHeight(縦ピクセル数)の値が負の場合、方向が上から下に保存されるトップダウンDIBとなるが、対応する処理系は限られている。
色空間がYUV(YCrCb)の場合などは、biHeightの符号にかかわらず常にトップダウンとなる。処理系は正負いずれの値でもその絶対値を用い、トップダウンとして処理を受け付ける必要がある。
なお、圧縮フォーマットではbiHeightはイメージの方向にかかわらず必ず正の値を用いる。
通常のBMPの色空間はRGBである。
biCompressionでYUV(YCrCb)を指定すれば、BMPファイルにYUV(YCrCb)で画像を記録することも可能である。
YUVにもいろいろあるが、フォーマットに応じたFOURCCをbiCompressionに指定することになる。たとえばYUV 4:2:2なら"UYVY"や"Y422"などとするのが一般的である。
基本的なFOURCCはFOURCC.orgに登録されており、フォーマットなどについても情報がある。
コメントなどを投稿するフォームは、日本語対応時のみ表示されます