BMP位圖之1位位圖(一)


起始結構

typedef struct tagBITMAPFILEHEADER {

WORD bfType; //類型名,字符串“BM”,

DWORD bfSize; //文件大小

WORD bfReserved1; //保留字

WORD bfReserved2; //保留字

DWORD bfOffBits; //實際位圖數據的偏移字節數,即前三個部分長度之和

} BITMAPFILEHEADER;

對應數據

WORD bfType : 0x4d42

DWORD bfSize:0x16cbe

WORD bfReserved1:0x0

WORD bfReserved2:0x0

DWORD bfOffBits:0x3e

緊跟着是

typedef struct tagBITMAPINFOHEADER{

DWORD biSize; //指定此結構體的長度,0x28

LONG biWidth; //位圖寬

LONG biHeight; //位圖高.為正,表示從下往上存儲,左下角是起點。為負,表示從上往下儲存,左上角是起點

WORD biPlanes; //平面數,為1

WORD biBitCount //采用顏色位數,可以是1,2,4,8,16,24,32

DWORD biCompression; //壓縮方式,可以是0,1,2,其中0表示不壓縮

DWORD biSizeImage; //實際位圖數據占用的字節數

LONG biXPelsPerMeter; //X方向分辨率

LONG biYPelsPerMeter; //Y方向分辨率

DWORD biClrUsed; //使用的顏色數,如果為0,則表示默認值(2^顏色位數)

DWORD biClrImportant; //重要顏色數,如果為0,則表示所有顏色都是重要的

} BITMAPINFOHEADER;

對應數據

DWORD biSize:0x28

LONG biWidth:0x480

LONG biHeight:0x288

WORD biPlanes:0x1

WORD biBitCount:0x1

DWORD biCompression:0x0

DWORD biSizeImage:0x16c80

LONG biXPelsPerMeter:0x0

LONG biYPelsPerMeter:0x0

DWORD biClrUsed:0x0

DWORD biClrImportant:0x0

1位位圖有調色板2^1=2個

對應是以下結構的數組

typedef struct tagRGBQUAD {

BYTE rgbBlue; //藍色

BYTE rgbGreen; //綠色

BYTE rgbRed; //紅色

BYTE rgbReserved; //保留值,常用於Alpha透明值

} RGBQUAD;

索引0:(B,G,R,A)=(0x0,0x0,0x0,0x0)

索引1:(B,G,R,A)=(0xff,0xff,0xff,0x0)

之后都是數據區,數據緊密排列,無對齊操作

此1位位圖,數據區操作方法:每次取一個字節,此字節的第7位到第0位是讀取順序。

代碼實現

由於采用CreateDIBSection可以讓微軟自帶的GDI去解析(包括解碼壓縮類型),我們需要做的就是定位位圖的數據區域就行了。具體實現代碼,放在本系列的最后!!!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM