位圖(.bmp)文件結構

bmp位圖主要分爲4部分,文件頭、信息頭、調色板(24位位圖和32位位圖沒有調色板)、圖像數據區。
文件頭定義如下:

typedef struct tagBITMAPFILEHEADER 
{ 
WORD bfType; // 位圖文件的類型,必須爲“BM” ,16進製爲0x424D。佔2字節
DWORD bfSize; // 位圖文件的大小,以字節爲單位 ;佔4字節
WORD bfReserved1; // 位圖文件保留字,必須爲0 ;佔2字節
WORD bfReserved2; // 位圖文件保留字,必須爲0 ;佔2字節
DWORD bfOffBits; // 位圖數據的起始位置,以相對於位圖文件頭的偏移量表示,以字節爲
單位 ;佔4字節,就是文件頭+信息頭+調色板總長度,即非圖像數據區的長度。
} BITMAPFILEHEADER ;//該結構佔據14個字節。 

信息頭定義如下:

typedef struct tagBITMAPINFOHEADER{ 
DWORD biSize; // 信息頭長度,此類型佔4字節
LONG biWidth; // 位圖的寬度,以像素爲單位,佔4字節
LONG biHeight; // 位圖的高度,以像素爲單位,佔4字節
WORD biPlanes; // 目標設備的平面數不清,必須爲1,佔2字節
WORD biBitCount// 每個像素所需的位數,必須是 1( 雙色), 4(16 色),8(256 色)或24(真彩色)
之一,佔2字節
DWORD biCompression; // 位圖壓縮類型,必須是 0(不壓縮),1(BI_RLE8 壓縮類型) 或
2(BI_RLE4 壓縮類型)之一,佔4字節
DWORD biSizeImage; // 位圖的大小,以字節爲單位,佔4字節
LONG biXPelsPerMeter; // 位圖水平分辨率,每米像素數,佔4字節
LONG biYPelsPerMeter; // 位圖垂直分辨率,每米像素數,佔4字節
DWORD biClrUsed;// 位圖實際使用的顏色表中的顏色數,佔4字節
DWORD biClrImportant;// 位圖顯示過程中重要的顏色數,佔4字節
} BITMAPINFOHEADER ;該結構佔據40個字節。 

調色板有若干個表項,每一個表項是一個RGBQUAD 類型的結構,定義一種顏色。其結構定義:

typedef struct tagRGBQUAD { 
BYTErgbBlue;// 藍色的亮度(值範圍爲0-255) 
BYTErgbGreen; // 綠色的亮度(值範圍爲0-255) 
BYTErgbRed; // 紅色的亮度(值範圍爲0-255) 
BYTErgbReserved;// 保留,必須爲0 
} RGBQUAD; //共4字節。

只有單色、16色、256色位圖有調色板,24位位圖(真色彩)每個像素是用三個字節表示,分別對應B(藍)、G(綠)、R(紅)三個值,文件頭+信息頭+調色板總長度固定爲54字節。32位位圖與24位的區別就是每個像素RGB值後面多了一個ALPHA通道,用來控制圖片的透明度。
單色、16色、256的圖像數據區中的數據不是像素值,是調色板中的顏色的映射。
數據區的第一個行像素值相當於圖像的最後一行像素,用下圖比較明顯:
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章