BMP图片的解析,关于压缩方式
在做一個顯示bmp圖片到lcd屏的時候,發現有些bmp圖顯示不對.
同樣是16bit bmp卻有差異.
就查了一下格式.
bmp文件格式
| 位圖文件的組成 | 結構名稱 | 符號 |
| 位圖文件頭(bitmap-file header) | BITMAPFILEHEADER | bmfh |
| 位圖信息頭(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
?
其他壓縮方式較復雜,沒有使用到。
?
轉載于:https://www.cnblogs.com/fengeryi/p/3658519.html
總結
以上是生活随笔為你收集整理的BMP图片的解析,关于压缩方式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 收缩Mysql的ibdata1文件大小方
- 下一篇: mysql 优化一