目 次 |
---|
↓1.ファイルの構造 ↓2.カラーテーブル ↓3.データ |
BMP形式のファイルは,バイナリファイルである.その内容は,ファイルの先頭から順に大きく分けて,ヘッダ,カラーテーブル(フルカラーでは不要),データの3つの部分からなる.
表1はファイルの構造を示したもので,項番の順に書き込まれる.数値はリトルエンディアンで書き込まれる.なお,項番1から16までがヘッダ,項番17がカラーテーブル,項番18がデータである.
項番 | オフセット (16進) |
型 | 記号 | 内容 | 備考 |
---|---|---|---|---|---|
1 | 00 | unsigned short | bfType | ファイルの先頭から42h,4dh("BM")の順で書き込まれているようにする.リトルエンディアンを用いている場合は,bfType=4d42hとなる. | |
2 | 02 | unsigned long | bfSize | ファイルサイズ | 単位は[byte] |
3 | 06 | unsigned short | bfReserved1 | 予約1 | 0にする |
4 | 08 | unsigned short | bfReserved2 | 0にする | |
5 | 0A | unsigned long | bfOffBits | データ部の先頭位置 | 単位は[byte] |
6 | 0E | unsigned long | biSize | 項番6から16までのサイズ | 40になる |
7 | 12 | long | biWidth | 横画素数 | |
8 | 16 | long | biHeight | 縦画素数 | |
9 | 1A | unsigned short | biPlanes | 1にする | |
10 | 1C | unsigned short | biBitCount | 色数 |
単位は[bit] 1,4,8,24のいずれか |
11 | 1E | unsigned long | biCompression | 圧縮タイプ | 圧縮しない場合は0 |
12 | 22 | unsigned long | biSizeImage | データ部のサイズ | 単位は[byte] |
13 | 26 | long | biXPixPerMeter | 水平解像度 | 1[m]あたりの横画素数(0でよい) |
14 | 2A | long | biYPixPerMeter | 垂直解像度 | 1[m]あたりの縦画素数(0でよい) |
15 | 2E | unsigned long | biClrUsed | 実際に使用されているカラーテーブルの色数 |
0でよい 0の場合は,biBitCountで指定された色数が使用されていると扱われる. |
16 | 32 | unsigned long | biClrImportant | カラーテーブル内の重要な色数 | 0でよい |
項番17(カラーテーブル)はbiBitCount=1,4,8のときのみ必要 | |||||
*17 | 36 | unsigned char | rgbBlue | カラーテーブル[0]のb座標値 | biBitCount=1,4,8のときのみ |
37 | unsigned char | rgbGreen | カラーテーブル[0]のg座標値 | biBitCount=1,4,8のときのみ | |
38 | unsigned char | rgbRed | カラーテーブル[0]のr座標値 | biBitCount=1,4,8のときのみ | |
39 | unsigned char | rgbReserved | カラーテーブル[0]の予約 |
0にする biBitCount=1,4,8のときのみ |
|
・ ・ ・ |
・ ・ ・ |
・ ・ ・ |
・ ・ ・ |
biBitCoout=1(2色)のときは[1]まで biBitCoout=4(16色)のときは[15]まで biBitCoout=8(256色)のときは[255]まで 上記の4項目が必要 |
|
項番18(データ)の書き込み方はbiBitCountによって異なる | |||||
18 |
3E(1) 76(4) 436(8) 36(24) |
データ オフセットはbiBitCountによって異なる (オフセットのかっこ内数字はbiBitCountの値) |
ヘッダ部で指定した色数が1[bit](2色),4[bit](16色),8[bit](256色)のときに必要であり, 24[bit](フルカラー)では不要である.
使用され得る色のrgb座標値を,色ごとにすべて書きこむ.それぞれの色については,表2の形式を用いる.表2の形式の数値の並びを2色の画像では2回,16色では16回,256色では256回繰り返して書き込む.
従って,表1のヘッダ部の後に書き込まれるカラーテーブルのサイズは,色数によって表3のようになる.
項番 | 型 | 記号 | 内容 | 備考 |
---|---|---|---|---|
1 | unsigned char | rgbBlue | b座標値 | |
2 | unsigned char | rgbGreen | g座標値 | |
3 | unsigned char | rgbRed | r座標値 | |
4 | unsigned char | rgbReserved | 予約 | 0にする |
biBitCount | 色数 | サイズ[byte] |
---|---|---|
1 | 2 | 8 |
4 | 16 | 64 |
8 | 256 | 1024 |
24 | 16777216 | 0 |
データは,下から順にラインごと,各ラインでは左の画素から順に,画素ごとに書き込む.8×8画素の画像を例にとると,画素ごとの書き込む順序は図1のようになる.
57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 |
49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 |
41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 |
33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 |
25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 |
17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 |
9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
各ライン及び各画素における書き込み方は以下の通りである.
rgb各座標値をb,g,rの順に,それぞれunsigned char型で書き込む.すなわち,画素ごとでは,項番4がないことを除いて表2と同じ形式となる.
各画素の色と同じ色がカラーテーブル部に書き込まれているので,その色が書き込まれた順番を0から数えた数で書き込む.8[bit]カラーの場合は0から255までの数値を,4[bit]カラーの場合は0から15までの数値を,2[bit]カラーの場合は0または1を,それぞれの色数と同じビット数で書き込む.C言語では,最も小さい場合でも変数のサイズは1[byte]であるが,このサイズで8[bit]カラーの場合は1画素,4[bit]では2画素,1[bit]では8画素分の数値を書き込むことになる.8[bit]の場合はそのまま画素ごとにunsigned char型で書き込めばよいが,それ以外の場合にはビット演算が必要となる.
基本的には,各画素ごとに4.2の方法で,左の画素から書き込むが,各ラインのサイズが4[byte]の倍数になるようにする.そのサイズに満たない場合は,ラインごとにデータのない末尾に0を書き込む.例えば,横画素数が97画素の画像の場合,1ラインごとのサイズは表4のようにする.
biBitCount | 計算上のサイズ[byte] | 実際に書き込むサイズ[byte] |
---|---|---|
1 | 12.125 (12[byte]+1[bit]) |
16 |
4 | 48.5 (48[byte]+4[bit]) |
52 |
8 | 97 | 100 |
24 | 291 | 292 |
すなわち,色数が24[bit]では1[byte],8[bit]では3[byte],4[bit]では3[byte]+4[bit],1[bit]では3[byte]+7[bit]分,それぞれ末尾に0を書き込まなければならない.
Jump to ... | |
---|---|
←音声と画像のフォーマット ←←各種資料集 ←←←情報工学科トップページ ←←←←東京高専トップページ |
↑↑このページの先頭 ↑1.ファイルの構造 ↑2.カラーテーブル ↑3.データ |