1,。位圖文件頭 typedef struct tagBITMAPFILEHEADER { WORD bfType; //文件類型標頭,,必須為 0x4D42,即“BM” DWORD bfSize; //整個文件的長度,,以字節(jié)為單位 WORD bfReserved1; //保留,,必須為 0 WORD bfReserved2; //保留,必須為 0 DWDRD bfOffBits; //指定文件中實際的位圖數據距 BITMAPINFOHEADER 結構 //的字節(jié)偏移量 }BITMAPFILEHEADER; 2,。位圖信息段 typedef struct tagBITMAPINFO { BITMAPINFOHEADER bmiHeader; //位圖信息頭 RGBQUAD bmiColors[1]; //調色板(如果有) }BITMAPINFO; typedef struct tagBITMAPINFOHEADER { DWORD biSize; //指定 BITMAPINFOHERDER 結構所需字節(jié)數,,對Windows DIB 來說,該字節(jié)數為 40 LONG biWidth; //以像素為單位指定位圖的寬度 LONG biHeight; //以像素為單位指定位圖的高度,,如果它是一個正值,,則位圖數據是按照掃描行自下而上存儲,位圖的原點在左下角,,如果它是一個負值,,則位圖數據是按照掃描行自上而下存儲,位圖的原點在左上角 WORD biPlanes; //目標設備的位平面數,,必須置為 1 WORD biBitCount; //每像素的位數,,應為 1、4,、8,、16、24 或 32 DWORD biCompression; //壓縮類型,對于未壓縮位圖總是 BI_RGB,,若為 BI_RLE8 表示以每像素 8 位的游程長度編碼形式壓縮 DWORD biSizeImage; //位圖圖像字節(jié)數 LONG biXPelsPerMeter; //指定目標像素的水平分辨率,,以每米像素數表示 LONG biYPelsPerMeter; //指定目標像素的垂直分辨率,以每米像素數表示 DWORD biClrUsed; //顏色表中位圖實際使用的顏色數 DWORD biClrImportant; //最重要的顏色索引數目,,若為 0,,則所有顏色都重要 // 8 位圖像通常使 biClrUsed 和biClrImportant 兩字段為 256,16/ 24 /32 位的則為 0 }BITMAPINFOHEADER; 若 biBitCount 的值為 8,,則顏色表的項數為 256,,每個顏色表項是一個 RGBQUAD 結構,而 16/24/32 位圖像不使用顏色表,,在位圖數據中直接用16/24/32位的RGB值來表示一個像素,。 typedef struct tagRGBQUAD { BYTE rgbBlue; //藍色的強度(0-255) BYTE rgbGreen; //綠色的強度(0-255) BYTE rgbRed; //紅色的強度(0-255) BYTE rgbReserved; //保留,必須置為 0 }RGBQUAD; 3,。位圖數據區(qū) 每行都被填充到一個 4 字節(jié)邊界,。一個像素可以有 1、4,、8,、16、24 或 32 個連續(xù)位組成,,這取決于 DIB 的顏色分辨率,。對于 16 位、24 位和 32 位的 DIB,,每個像素表示一個 RGB 顏色。 對于 16 位的 DIB 一般有三種位編碼技術:一是 Alph 在 24 位 DIB 中,一個像素一般包含 8 位紅色值,、8 位綠色值和 8 位藍色值,。兩種位編碼技術,一是 Alpha(8). 1 位的 DIB 是單色 DIB,,但不一定是黑和白,,它可以包含從每個 DIB 的顏色表中選擇的任何兩種顏色。一個單色 DIB 具有兩個 32 位顏色表條目,,每個包含各 8 位的紅,、綠、藍值,。像素值 0 表示使用第一個條目,,1 表示使用第二個條目。如果顯卡工作在 256 模式下,,那么,,程序可以調整系統(tǒng)調色板,以加載這兩種指定的顏色,。 8 位 DIB 是很普遍的,,它具有一個顏色表,該顏色表具有 256(或更少)個 32 位條目,。每個像素值是該顏色表的一個索引,。在程序中可以利用這個顏色表創(chuàng)建一個邏輯調色板,如果另一個程序具有對系統(tǒng)調色板的控制權,,那么,,Windows 會盡力將邏輯調色板顏色與系統(tǒng)調色板相匹配。 |
|