BITMAPFILEHEADER結(jié)構(gòu)的各個(gè)域詳細(xì)說明如下:
bfType:位圖文件類型,必須是0x424D,即字符串“BM”,也就是說,所有的“*.bmp”文件的頭兩個(gè)字節(jié)都是“BM”。 bfSize:位圖文件大小,包括這14個(gè)字節(jié)。
bfReserved1, bfReserved2:Windows保留字,暫不用。
bfOffBits:從文件頭到實(shí)際的位圖數(shù)據(jù)的偏移字節(jié)數(shù)。
BITMAPINFOHEADER結(jié)構(gòu)的各個(gè)域的詳細(xì)說明如下:
biSize:本結(jié)構(gòu)的長度,為40個(gè)字節(jié)。 biWidth:位圖的寬度,以像素為單位。
biHeight:位圖的高度,以像素為單位。
biPlanes:目標(biāo)設(shè)備的級(jí)別,必須是1。
biBitCount:每個(gè)像素所占的位數(shù)(bit),其值必須為1(黑白圖像)、4(16色圖)、8(256色)、24(真彩色圖),新的BMP格式支持32位色。
biCompresssion:位圖壓縮類型,有效的值為BI_RGB(未經(jīng)壓縮)、BI_RLE8、BI_RLE4、BI_BITFILEDS(均為Windows定義常量)。這里只討論未經(jīng)壓縮的情況,即biCompression=BI_RGB。
biSizeImage:實(shí)際的位圖數(shù)據(jù)占用的字節(jié)數(shù),該值的大小在第4部分位圖數(shù)據(jù)中有具體解釋。
biXPelsPerMeter:指定目標(biāo)設(shè)備的水平分辨率,單位是像素/米。
biYPelsPerMeter:指定目標(biāo)設(shè)備的垂直分辨率,單位是像素/米。
biClrUsed:位圖實(shí)際用到的顏色數(shù),如果該值為零,則用到的顏色數(shù)為2的biBitCount次冪。
biClrImportant:位圖顯示過程中重要的顏色數(shù),如果該值為零,則認(rèn)為所有的顏色都是重要的。
RGBQUAD結(jié)構(gòu)的各個(gè)域的詳細(xì)說明如下:
rgbBlue:該顏色的藍(lán)色分量; rgbGreen:該顏色的綠色分量;
rgbRed:該顏色的紅色分量;
rgbReserved:保留字節(jié),暫不用。
第4部分是位圖數(shù)據(jù),即圖像數(shù)據(jù),其緊跟在位圖文件頭、位圖信息頭和顏色表(如果有顏色表的話)之后,記錄了圖像的每一個(gè)像素值。對(duì)于有顏色表的位圖,位圖數(shù)據(jù)就是該像素顏色在調(diào)色板中的索引值;對(duì)于真彩色圖,位圖數(shù)據(jù)就是實(shí)際的R、G、B值(三個(gè)分量的存儲(chǔ)順序是B、G、R)
第一,Windows規(guī)定一個(gè)掃描行所占的字節(jié)數(shù)必須是4的倍數(shù),不足4的倍數(shù)則要對(duì)其進(jìn)行擴(kuò)充。假設(shè)圖像的寬為biWidth個(gè)像素、每像素biBitCount個(gè)比特,其一個(gè)掃描行所占的真實(shí)字節(jié)數(shù)的計(jì)算公式如下:
DataSizePerLine = (biWidth * biBitCount /8+ 3) / 4*4 那么,不壓縮情況下位圖數(shù)據(jù)的大小(BITMAPINFOHEADER結(jié)構(gòu)中的biSizeImage成員)計(jì)算如下:
biSizeImage = DataSizePerLine * biHeight 第二,一般來說,BMP文件的數(shù)據(jù)是從圖像的左下角開始逐行掃描圖像的,即從下到上、從左到右,將圖像的像素值一一記錄下來,因此圖像坐標(biāo)零點(diǎn)在圖像左下角
|
|