BMP文件由文件頭、位圖信息頭、顏色表信息和圖像數據四部分組成。結構爲:
位圖文件頭結構:BITMAPFILEHEADER
位圖信息頭結構:BITMAPINFOHEADER
位圖顏色表:RGBQUAD
位圖像素數據
1、位圖文件頭結構包含了BMP文件的類型、文件大小、和位圖其實位置等信息,結構定義如下:
typedef struct tagBITMAPFILEHEADER {
WORD bfType; //位圖文件的類型,必須爲BM(0x4D42)
DWORD bfSize; //位圖文件的大小,以字節爲單位
WORD bfReserved1; //位圖文件保留字,必須爲0
WORD bfReserved2; //位圖文件保留字,必須爲0
DWORD bfOffBits; //位圖數據其實位置,以相對於文件頭的偏移量表示,以字節爲單位
} BITMAPFILEHEADER, FAR *LPBITMAPFILEHEADER, *PBITMAPFILEHEADER;
2、位圖信息頭結構用於說明位圖的尺寸等信息,結構定義如下:
typedef struct tagBITMAPINFOHEADER{
DWORD biSize; //本結構所佔用字節數
LONG biWidth; //位圖的寬度,以像素爲單位
LONG biHeight; //位圖的高度,以像素爲單位
WORD biPlanes; //目標設備的級別,必須爲1
WORD biBitCount; //每個像素所需要的位數,必須是1(雙色)、4(16色)、8(256色)或24(真彩色)之一
DWORD biCompression; //位圖壓縮類型,必須是0(不壓縮)、1(B1_RLE8壓縮類型)或2(B1_RLE4壓縮類型)之一
DWORD biSizeImage; //位圖大小,以字節爲單位
LONG biXPelsPerMeter; //位圖水平分辨率,以像素/米爲單位
LONG biYPelsPerMeter; //位圖垂直分辨率,以像素/米爲單位
DWORD biClrUsed; //位圖實際使用的顏色表中的顏色數
DWORD biClrImportant; //位圖顯示過程中重要的顏色數
} BITMAPINFOHEADER, FAR *LPBITMAPINFOHEADER, *PBITMAPINFOHEADER;
3、顏色表用於說明位圖中得顏色,它有若干個表項,每一個表項是一個RGBQUAD結構,定義一種顏色,RGBQUAD結構定義如下:
typedef struct tagRGBQUAD {
BYTE rgbBlue; //藍色的亮度(值範圍爲0-255)
BYTE rgbGreen; //綠色的亮度(值範圍爲0-255)
BYTE rgbRed; //紅色的亮度(值範圍爲0-255)
BYTE rgbReserved; //保留,必須爲0
} RGBQUAD;
顏色表中的RGBQUAD結構數據的個數由biBitCount來確定。當biBitCount的值爲1、4、8時,分別有2、16、256個表項,當其值24時,沒有顏色表。
位圖信息頭和顏色表構成位圖信息,BITMAPINFO結構定義如下:
typedef struct tagBITMAPINFO {
BITMAPINFOHEADER bmiHeader; //位圖信息頭
RGBQUAD bmiColors[1]; //顏色表,bmiColors是指針
} BITMAPINFO, FAR *LPBITMAPINFO, *PBITMAPINFO;
4、位圖數據
當biBitCount=1時,8個像素佔一個字節
當biBitCount=4時,2個像素佔一個字節
當biBitCount=8是,1個像素佔一個字節
當biBitCount=24時,1個像素佔三個字節