BMP文件組成
BMP文件頭
typedef struct tagBITMAPFILEHEADER
{
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; //
WORD biBitCount; // 每個像素所需的位數,
DWORD biCompression; // 位圖壓縮類型,
DWORD biSizeImage; // 位圖的大小,
LONG biXPelsPerMeter; //
LONG biYPelsPerMeter; //
DWORD biClrUsed; // 顏色數
DWORD biClrImportant; // 重要的顏色數
} BITMAPINFOHEADER;
顏色表
typedef struct tagRGBQUAD
{
BYTE rgbBlue;// 藍色
BYTE rgbGreen; // 綠色
BYTE rgbRed; // 紅色
BYTE rgbReserved;// 0
} RGBQUAD;
位圖信息-- BITMAPINFO結構
struct tagBITMAPINFO
{
BITMAPINFOHEADER bmiHeader;
RGBQUAD bmiColors[1]; // 顏色表
} BITMAPINFO;
1個像素的真彩色文件
前14個字節,bitmapfileheader內容:
- 42 4D:代表BMP
- 3A 00 00 00:反過來整個區域大小
- 00 00 00 00 :保留字
- 36 00 00 00:反過來數字的偏移是36,那麼我們走到第36字節看一下,發現是FF FF FF ,正好是我們這一個白像素1。
接下來40字節,bitmapinfoheader內容:
- 28 00 00 00:bisize
- 01 00 00 00:biwidth
- 01 00 00 00:biheight
- 01 00:位平面數
- 18 00:真彩色24位
- 00 00 00 00:壓縮方式
- 04 00 00 00:位圖數據的字節數,加上結尾,一共有四個字節
- 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00:標準圖像全0
接下來是RGBQUAD顏色表
然後是數據區!!
1個像素的256僞彩色文件
256位圖文件調色板
- 調色板 256項;
- 所佔字節數:256*4=1024;
- 1024/16=64行;
- 總行數43h=4*16+3=67行;
- 文件頭佔 3行;
- 每行16字節,可以存儲4個表項,
- 64*4=256個表項。