BMP圖片的解析,關於壓縮方式

在作一個顯示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的值:

  • 1字節用於藍色份量 
  • 1字節用於綠色份量 
  • 1字節用於紅色份量 
  • 1字節用於填充符(設置爲0)

圖像數據

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

 

其餘壓縮方式較複雜,沒有使用到。

相關文章
相關標籤/搜索