BMP文件結構

       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個像素佔三個字節

發佈了30 篇原創文章 · 獲贊 31 · 訪問量 35萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章