BMP檔案結構 (轉)

worldblog發表於2007-12-12
BMP檔案結構 (轉)[@more@]1. BMP組成
BMP檔案由檔案頭、點陣圖資訊頭、顏色資訊和圖形資料四部分組成。
2. BMP檔案頭
BMP檔案頭資料結構含有BMP檔案的型別、檔案大小和點陣圖起始位置等資訊。

其結構定義如下:

typedef struct tagBITMAPFILEHEADER
{
WORfType; // 位件的型別,必須為BM
D bfSize; // 點陣圖檔案的大小,以位元組為單位
WORDbfReserved1; // 點陣圖檔案保留字,必須為0
WORDbfReserved2; // 點陣圖檔案保留字,必須為0
DWORD bfOffBits; // 點陣圖資料的起始位置,以相對於點陣圖
// 檔案頭的偏移量表示,以位元組為單位
} BITMAPFILEHEADER;

3. 點陣圖資訊頭

BMP點陣圖資訊頭資料用於說明點陣圖的尺寸等資訊。
typedef struct tagBITMNFOHEADER{
DWORD biSize; // 本結構所佔用位元組數
LONGbiWidth; // 點陣圖的寬度,以畫素為單位
LONGbiHeight; // 點陣圖的高度,以畫素為單位
WORD biPlanes; // 目標裝置的級別,必須為1
WORD biBitCount// 每個畫素所需的位數,必須是1(雙色),
// 4(16色),8(256色)或24(真彩色)之一
DWORD biCompression; // 點陣圖型別,必須是 0(不壓縮),
// 1(BI_RLE8壓縮型別)或2(BI_RLE4壓縮型別)之一
DWORD biSizeImage; // 點陣圖的大小,以位元組為單位
LONGbiXPelsPerMeter; // 點陣圖水平解析度,每米畫素數
LONGbiYPelsPerMeter; // 點陣圖垂直解析度,每米畫素數
DWORD biClrUsed;// 點陣圖實際使用的顏色表中的顏色數
DWORD biClrImportant;// 點陣圖顯示過程中重要的顏色數
} BITMAPINFOHEADER;

4. 顏色表
顏色表用於說明點陣圖中的顏色,它有若干個表項,每一個表項是一個RGBQUAD型別的結構,定義一種顏色。RGBQUAD結構的定義如下:

typedef struct tagRGBQUAD {
BYTErgbBlue;// 藍色的亮度(值範圍為0-255)
BYTErgbGreen; // 綠色的亮度(值範圍為0-255)
BYTErgbRed; // 紅色的亮度(值範圍為0-255)
BYTErgbReserved;// 保留,必須為0
} RGBQUAD;
顏色表中RGBQUAD結構資料的個數有biBitCount來確定:
當biBitCount=1,4,8時,分別有2,16,256個表項;
當biBitCount=24時,沒有顏色表項。
點陣圖資訊頭和顏色表組成點陣圖資訊,BITMAPINFO結構定義如下:
typedef struct tagBITMAPINFO {
BITMAPINFOHEADER bmiHeader; // 點陣圖資訊頭
RGBQUAD bmiColors[1]; // 顏色表
} BITMAPINFO;


5. 點陣圖資料
點陣圖資料記錄了點陣圖的每一個畫素值,記錄順序是在掃描行內是從左到右,掃描行之間是從下到上。點陣圖的一個畫素值所佔的位元組數:

當biBitCount=1時,8個畫素佔1個位元組;
當biBitCount=4時,2個畫素佔1個位元組;
當biBitCount=8時,1個畫素佔1個位元組;
當biBitCount=24時,1個畫素佔3個位元組;
規定一個掃描行所佔的位元組數必須是
4的倍數(即以long為單位),不足的以0填充,
一個掃描行所佔的位元組數計算方法:
DataSizeine= (biWidth* biBitCount+31)/8;
// 一個掃描行所佔的位元組數
DataSizePerLine= DataSizePerLine/4*4; // 位元組數必須是4的倍數
點陣圖資料的大小(不壓縮情況下):
DataSize= DataSizePerLine* biHeight;




來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-991952/,如需轉載,請註明出處,否則將追究法律責任。

相關文章