BITMAPFILEHEADER, 14 位元組)BITMAPINFOHEADER 等, 40+ 位元組)RGBQUAD 陣列, 可選)BITMAPFILEHEADER
typedef struct tagBITMAPFILEHEADER {
WORD bfType; // 必須為 'BM' (0x4D42)
DWORD bfSize; // 檔案總大小 (位元組)
WORD bfReserved1; // 保留,必須 0
WORD bfReserved2; // 保留,必須 0
DWORD bfOffBits; // 像素資料相對檔案開頭位移
} BITMAPFILEHEADER; // 14 bytes, 2-byte alignment
BITMAPINFOHEADER (最常用, 40 位元組)
typedef struct tagBITMAPINFOHEADER {
DWORD biSize; // 結構大小 (40)
LONG biWidth; // 寬度 (像素), 正數=底向上, 負數=頂向下
LONG biHeight; // 高度 (像素)
WORD biPlanes; // 必須為 1
WORD biBitCount; // 色深: 1, 4, 8, 16, 24, 32
DWORD biCompression; // 壓縮類型: BI_RGB(0), BI_RLE8(1), BI_RLE4(2), BI_BITFIELDS(3), BI_JPEG(4), BI_PNG(5)
DWORD biSizeImage; // 像素資料大小 (可為 0 表示 BI_RGB 未壓縮)
LONG biXPelsPerMeter; // 水平解析度 (像素/米)
LONG biYPelsPerMeter; // 垂直解析度
DWORD biClrUsed; // 實際使用調色盤顏色數 (0=全部)
DWORD biClrImportant; // 重要顏色數 (0=全部)
} BITMAPINFOHEADER;
其他版本:BITMAPV4HEADER (108 bytes, 加入色域/Gamma/Alpha 遮罩)、BITMAPV5HEADER (124 bytes, 加入 ICC 設定檔)。
RGBQUAD
typedef struct tagRGBQUAD {
BYTE rgbBlue;
BYTE rgbGreen;
BYTE rgbRed;
BYTE rgbReserved; // 必須 0
} RGBQUAD; // 4 bytes
biBitCount 決定:1-bit→2色, 4-bit→16色, 8-bit→256色, 16/24/32-bit→無調色盤 (直接 RGB 值)。biClrUsed 可指定實際使用色數 (2^biBitCount 以下)。biHeight 為正。biHeight 為負表示頂向下 (DIB 區段常用)。rowSize = ((biWidth * biBitCount + 31) / 32) * 4。biCompression 為 BI_BITFIELDS 時,緊接資訊頭後有 3 個 DWORD 遮罩 (紅/綠/藍),常見 5-6-5 或 5-5-5 格式。
bfSize == bfOffBits + biSizeImage (或計算值: |biHeight| * rowSize)
bfOffBits == sizeof(BITMAPFILEHEADER) + biSize + (biClrUsed ? biClrUsed*4 : (biBitCount<=8 ? (1<
#pragma pack(push, 2) 確保結構對齊 (檔案頭 2-byte alignment)。bfType == 'MB' (小端序讀取為 0x4D42)。BI_BITFIELDS 解析 16/32-bit 遮罩。rowSize 對齊補齊。