其結構定義如下:
{
WORD bfType; // 位圖文件的類型,必須爲BM
DWORD bfSize; // 位圖文件的大小,以字節爲單位
WORD bfReserved1; // 位圖文件保留字,必須爲0
WORD bfReserved2; // 位圖文件保留字,必須爲0
DWORD bfOffBits; // 位圖數據的起始位置,以相對於位圖文件
} BITMAPFILEHEADER;
typedef struct tagBITMAPINFOHEADER
{
DWORD biSize; // 本結構所佔用字節數
LONG biWidth; // 位圖的寬度,以像素爲單位
LONG biHeight; // 位圖的高度,以像素爲單位
WORD biPlanes; // 目標設備的級別,必須爲1
WORD biBitCount // 每個像素所需的位數,必須是1(雙色),
DWORD biCompression; // 位圖壓縮類型,必須是 0(不壓縮),1(BI_RLE8
DWORD biSizeImage; // 位圖的大小,以字節爲單位
LONG biXPelsPerMeter; // 位圖水平分辨率,每米像素數
LONG biYPelsPerMeter; // 位圖垂直分辨率,每米像素數
DWORD biClrUsed;// 位圖實際使用的顏色表中的顏色數
DWORD biClrImportant;// 位圖顯示過程中重要的顏色數
} BITMAPINFOHEADER;
{
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個表項;
當biBitCount=24時,沒有顏色表項。
位圖信息頭和顏色表組成位圖信息,BITMAPINFO結構定義如下:
typedef struct tagBITMAPINFO
{
BITMAPINFOHEADER bmiHeader; // 位圖信息頭
RGBQUAD bmiColors[1]; // 顏色表
} BITMAPINFO;
當biBitCount=4時,2個像素佔1個字節;
當biBitCount=8時,1個像素佔1個字節;
當biBitCount=24時,1個像素佔3個字節;
一個掃描行所佔的字節數計算方法: DataSizePerLine= (biWidth* biBitCount+31)/8
一個掃描行所佔的字節數 DataSizePerLine= DataSizePerLine/4*4; (字節數必須是4的倍數)
位圖數據的大小(不壓縮情況下): DataSize= DataSizePerLine* biHeight;