將BMP文件以16進制形式打開可看見如下內容:
OFFSET |
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F |
|
00000000 00000010 00000020 00000030 00000040 * * * * * 00038420 00038430 |
42 4D 36 84 03 00 00 00 00 00 36 00 00 00 28 00 00 00 40 01 00 00 F0 00 00 00 01 00 18 00 00 00 00 00 00 84 03 00 D7 0D 00 00 D7 0D 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF |
|
依照下表的格式分析BMP文件的數據,可知上表中數據的意義:
位置 |
名稱 |
大小 (Bytes) |
值 |
含義 |
0x00000000 |
文件標識 |
2 |
0x42 0x4D (BM) |
兩字節的內容用來識別位圖的類型: BM : Windows 3.1x, 95, … BA :OS/2 Bitmap Array CI:OS/2 Color Icon CP :OS/2 Color Pointer IC: OS/2 Icon PT :OS/2 Pointer 注:因爲OS/2系統並沒有被普及開,所以在編程時,你只需判斷第一個標識BM就行。 |
0x00000002 |
File Size |
4 |
0x00038436 |
用字節表示的整個文件的大小(小端格式) |
0x00000006 |
Reserved |
4 |
0x00000000 |
保留,必須設置爲0 |
0x0000000A |
Bitmap Data Offset |
4 |
0x00000036 |
文件開始到位圖數據的偏移 (0x00000000~0x00000036) |
0x0000000E |
Bitmap Header Size |
4 |
0x00000028 |
位圖信息頭的長度,用來描述位圖的顏色、壓縮方法等。下面的長度表示: 0x28 – Windows 3.1.x,95,NT ,… 0x0C – OS/2 1.x 0x0F – OS/2 2.x 注:在windows95、98、2000等操作系統中,位圖信息頭的長度並不一定是0x28,因爲微軟已經制定出了新的BMP文件格式。其中的信息頭結構變化比較大,長度加長。所以最好不要直接使用常數0x28,而是應該從具體的文件中讀取這個值。這樣才能確保程序的兼容性。 |
0x00000012 |
Width |
4 |
0x00000140 |
位圖的寬度,以像素爲單位 |
0x00000016 |
Height |
4 |
0x000000F0 |
位圖的高度,以像素爲單位 |
0x0000001A |
Planes |
2 |
0x0001 |
位圖的位面數(注:該值總是1) |
0x0000001C |
Bits Per Pixel |
2 |
0x0018 |
每個像素的位數 1 – 單色位圖(實際上可有兩種顏色,缺省情況下是黑色和白色。你可以自己定義這兩種顏色) 4 – 16色位圖 8 – 256色位圖 16 – 16bit高彩色位圖 24 – 24bit真彩色位圖 32 – 32bit增強型真彩色位圖 |
0x0000001E |
Compression |
4 |
0x00000000 |
壓縮說明: 0 – 不壓縮(使用BI_RGB表示) 1 – RLE 8 使用8位RLE壓縮方式(使用BI_RGB8表示) 2 - RLE 4 使用4位RLE壓縮方式(使用BI_RGB4表示) 3 – Bitfields 位域存放方式(用BI_BITFIELDS表示) |
0x00000022 |
Bitmap Data Size |
4 |
0x00038400 |
用字節數表示的位圖數據的大小。該數必須是4的倍數 |
0x00000026 |
HResolution |
4 |
0x00000DD7 |
用像素/米表示的水平fenbianlv |
0x0000002A |
VResolution |
4 |
0x00000DD7 |
用像素/米表示的垂直fenbianlv |
0x0000002E |
Colors |
4 |
0x00000000 |
位圖使用的顏色數 |
0x00000032 |
Important Colors |
4 |
0x00000000 |
制定重要的顏色數。當該值等於顏色數時(或者等於0時),表示所有顏色都一樣重要 |
根據BMP版本的不同而不同 |
Palette |
N*4bytes |
|
調色板規範。對於調色板中的每個表項,這4個字節用下述方法描述RGB的值: 1字節用於藍色分量 1字節用於綠色分量 1字節用於紅色分量 1字節用於填充符(設置爲0) |
根據BMP版本及調色板尺寸的不同而不同 |
Bitmap Data |
xxx bytes |
|
該域的大小取決於壓縮方法及圖像的尺寸和圖像的位深度,它包含所有的位圖數據字節,這些數據可能是彩色調色板的索引號,也可能是實際的RGB值,這將根據圖像信息頭中的位深度值來決定。 |