在作一個顯示bmp圖片到lcd屏的時候,發現有些bmp圖顯示不對.chrome
一樣是16bit bmp卻有差別.spa
就查了一下格式.orm
bmp文件格式索引
位圖文件的組成圖片 |
結構名稱ci |
符號it |
位圖文件頭(bitmap-file header)io |
BITMAPFILEHEADERtable |
bmfhform |
位圖信息頭(bitmap-information header) |
BITMAPINFOHEADER |
bmih |
彩色表(color table) |
RGBQUAD |
aColors[] |
圖像數據陣列字節 |
BYTE |
aBitmapBits[] |
偏移量 |
域的名稱 |
大小 |
內容 |
|
圖像文件 頭 |
0000h |
標識符(Identifier) |
2 bytes |
兩字節的內容用來識別位圖的類型: ‘BM’ : Windows 3.1x, 95, NT, … ‘BA’ :OS/2 Bitmap Array ‘CI’ :OS/2 Color Icon ‘CP’ :OS/2 Color Pointer ‘IC’ : OS/2 Icon ‘PT’ :OS/2 Pointer |
0002h |
File Size |
1 dword |
用字節表示的整個文件的大小 |
|
0006h |
Reserved |
1 dword |
保留,設置爲0 |
|
000Ah |
Bitmap Data Offset |
1 dword |
從文件開始到位圖數據開始之間的數據(bitmap data)之間的偏移量 |
|
000Eh |
Bitmap Header Size |
1 dword |
位圖信息頭(Bitmap Info Header)的長度,用來描述位圖的顏色、壓縮方法等。下面的長度表示: 28h - Windows 3.1x, 95, NT, … 0Ch - OS/2 1.x F0h - OS/2 2.x |
|
0012h |
Width |
1 dword |
位圖的寬度,以像素爲單位 |
|
0016h |
Height |
1 dword |
位圖的高度,以像素爲單位 |
|
001Ah |
Planes |
1 word |
位圖的位面數 |
|
圖像 信息 頭
|
001Ch |
Bits Per Pixel |
1 word |
每一個像素的位數 1 - Monochrome bitmap 4 - 16 color bitmap 8 - 256 color bitmap 16 - 16bit (high color) bitmap 24 - 24bit (true color) bitmap 32 - 32bit (true color) bitmap |
001Eh |
Compression |
1 dword |
壓縮說明: 0 - none (也使用BI_RGB表示) 1 - RLE 8-bit / pixel (也使用BI_RLE4表示) 2 - RLE 4-bit / pixel (也使用BI_RLE8表示) 3 - Bitfields (也使用BI_BITFIELDS表示) |
|
0022h |
Bitmap Data Size |
1 dword |
用字節數表示的位圖數據的大小。該數必須是4的倍數 |
|
0026h |
HResolution |
1 dword |
用像素/米表示的水平分辨率 |
|
002Ah |
VResolution |
1 dword |
用像素/米表示的垂直分辨率 |
|
002Eh |
Colors |
1 dword |
位圖使用的顏色數。如8-位/像素表示爲100h或者 256. |
|
0032h |
Important Colors |
1 dword |
指定重要的顏色數。當該域的值等於顏色數時,表示全部顏色都同樣重要 |
|
調色板數據 |
0036h |
Palette |
N * 4 byte |
調色板規範。對於調色板中的每一個表項,這4個字節用下述方法來描述RGB的值:
|
圖像數據 |
0436h |
Bitmap Data |
x bytes |
該域的大小取決於壓縮方法,它包含全部的位圖數據字節,這些數據實際就是彩色調色板的索引號 |
後來打印了一下頭信息的各個值發現,壓縮方式不同
Compression =0 或
Compression=3.
Compression=0時 rgb565使用3個字節即,R、G、B各佔1個字節,共3個字節。
而
Compression=3時R、G、B總共佔2個字節。 調色板數據會存儲三個掩碼。 RGB565,這三個值是0xF800、0x07E0、0x001F。
即取出2個字節的圖像數據與上0xF800就是R
其餘壓縮方式較複雜,沒有使用到。