聯(lián)系我們 - 廣告服務(wù) - 聯(lián)系電話:
您的當(dāng)前位置: > 關(guān)注 > > 正文

當(dāng)前速看:bmp格式解析 Windows3.0:位圖文件格式與顯示設(shè)備無關(guān)

來源:CSDN 時(shí)間:2023-02-24 11:21:47


(資料圖)

位圖文件(Bitmap-File,BMP)格式是Windows采用的圖像文件存儲(chǔ)格式,在Windows環(huán)境下運(yùn)行的所有圖像處理軟件都支持這種格式。Windows 3.0以前的BMP位圖文件格式與顯示設(shè)備有關(guān),因此把它稱為設(shè)備相關(guān)位圖(device-dependent bitmap,DDB)文件格式。Windows 3.0以后的BMP位圖文件格式與顯示設(shè)備無關(guān),因此把這種BMP位圖文件格式稱為設(shè)備無關(guān)位圖(device-independent bitmap,DIB)格式,目的是為了讓W(xué)indows能夠在任何類型的顯示設(shè)備上顯示BMP位圖文件。       位圖文件可看成由4個(gè)部分組成:位圖文件頭(bitmap-file header)、位圖信息頭(bitmap-information header)、彩色表(color table)和定義位圖的字節(jié)陣列。可以文本打開方式打開BMP文件。 (1)文件頭信息塊 0000-0001:文件標(biāo)識(shí),為字母ASCII碼“BM”,42 4D。亦或者與19778相比較。 0002-0005:整個(gè)文件大小,單位字節(jié)。  低字節(jié)在前。 0006-0009:保留,每字節(jié)以“00”填寫。 000A-000D:記錄圖像數(shù)據(jù)區(qū)的起始位置。從文件開始到位圖數(shù)據(jù)(bitmap data)之間的偏移量。  (2)圖像描述信息塊 000E-0011:圖像描述信息塊的大小,常為28H。 0012-0015:圖像寬度。以像素為單位。低字節(jié)在前。 0016-0019:圖像高度。以像素為單位。低字節(jié)在前。 001A-001B:圖像的plane總數(shù)(恒為1)。 001C-001D:記錄像素的位數(shù),很重要的數(shù)值,圖像的顏色數(shù)由該值決定。 1 - Monochrome bitmap, 4 - 16 color bitmap, 8 - 256 color bitmap, F - 16位位圖, 10 - 16位RGB565位圖, 18 - 24bit (true color) bitmap, 20 - 32位位圖。 001E-0021:數(shù)據(jù)壓縮方式(數(shù)值位0:不壓縮;1:8位壓縮;2:4位壓縮;3:Bitfields壓縮)。 0022-0025:圖像區(qū)數(shù)據(jù)的大小。單位字節(jié),該數(shù)必須是4的倍數(shù)。 0026-0029:水平每米有多少像素,在設(shè)備無關(guān)位圖(.DIB)中,每字節(jié)以00H填寫。 002A-002D:垂直每米有多少像素,在設(shè)備無關(guān)位圖(.DIB)中,每字節(jié)以00H填寫。 002E-0031:此圖像所用的顏色數(shù)。 0032-0035:指定重要的顏色數(shù)。當(dāng)該域的值等于顏色數(shù)時(shí)(或者等于0時(shí)),表示所有顏色都一樣重要。      如上,整個(gè)位圖的信息頭共54字節(jié),每個(gè)位置有特定含義。 (3)顏色表(調(diào)色板)       顏色表的大小根據(jù)所使用的顏色模式而定,其中每4字節(jié)表示一種顏色,并以B(藍(lán)色)、G(綠色)、R(紅色)、alpha(32位位圖的透明度值,一般不需要)。顏色表的大小根據(jù)所使用的顏色模式而定:2色圖像為8字節(jié);16色圖像位64字節(jié);256色圖像為1024字節(jié)。其中,每4字節(jié)表示一種顏色,并以B (藍(lán)色)、G(綠色)、R(紅色)、alpha(32位位圖的透明度值,一般不需要)。即首先4字節(jié)表示顏色號(hào)1的顏色,接下來表示顏色號(hào)2的顏色,依此類推。          對(duì)于24-位真彩色圖象就不使用彩色表(同樣也包括16位、和32位位圖),因?yàn)槲粓D中的RGB值就代表了每個(gè)象素的顏色;而對(duì)于使用索引顏色的,則需要較大的調(diào)色板。 (4)圖像數(shù)據(jù)區(qū)        顏色表接下來為位圖文件的圖像數(shù)據(jù)區(qū),在此部分記錄著每點(diǎn)像素對(duì)應(yīng)的顏色索引號(hào),其記錄方式也隨顏色模式而定,既2色圖像每點(diǎn)占1位(8位為1字節(jié));16色圖像每點(diǎn)占4位(半字節(jié));256色圖像每點(diǎn)占8位(1字節(jié));真彩色圖像每點(diǎn)占24位(3字節(jié))。所以,整個(gè)數(shù)據(jù)區(qū)的大小也會(huì)隨之變化。究其規(guī)律而言,可的出如下計(jì)算公式:圖像數(shù)據(jù)信息大小=(圖像寬度*圖像高度*記錄像素的位數(shù))/8。掃描行是由底向上存儲(chǔ)的,這就是說,陣列中的第一個(gè)字節(jié)表示位圖左下角的像素,而最后一個(gè)字節(jié)表示位圖右上角的像素。        然而,未壓縮的圖像信息區(qū)的大小。除了真彩色模式外,其余的均大于或等于數(shù)據(jù)信息的大小。這是為什么呢?原因有兩個(gè): BMP文件記錄一行圖像是以字節(jié)為單位的。因此,就不存在一個(gè)字節(jié)中的數(shù)據(jù)位信息表示的點(diǎn)在不同的兩行中。也就是說,設(shè)顯示模式位16色,在每個(gè)字節(jié)分配兩個(gè)點(diǎn)信息時(shí),如果圖像的寬度為奇數(shù),那么最后一個(gè)像素點(diǎn)的信息將獨(dú)占一個(gè)字節(jié),這個(gè)字節(jié)的后4位將沒有意義。接下來的一個(gè)字節(jié)將開始記錄下一行的信息。  (5)實(shí)例分析

如下的4x4像素的位圖

經(jīng)過UE打開成16進(jìn)制文件后,顯示如下:

我們可以通過查找對(duì)應(yīng)的數(shù)據(jù)位來驗(yàn)證上面所分析的各部分信息。這樣就比較清楚了。 24位真彩色的數(shù)據(jù)格式為  B(8位)G(8位)R(8位),這是由于低字節(jié)在前造成的。  (6)位圖操作常使用的結(jié)構(gòu)體        位圖頭文件結(jié)構(gòu): typedef struct tagBITMAPFILEHEADER{short bfType;      int bfSize;      short bfReserved1;      short bfReserved2;      int bfOffBits; }BITMAPFILEHEADER, *PBITMAPFILEHEADER;       位圖信息結(jié)構(gòu): typedef struct tagBITMAPINFOHEADER{int biSize;       int biWidth;       int biHeight;       short biPlanes;       short biBitCount;       int biCompression;       int biSizeImage;       int biXPelsPerMeter;       int biYPelsPerMeter;       int biClrUsed;       int biClrImportant; }BITMAPINFOHEADER,*PBITMAPINFOHEADER;  (7)掃描順序 BMP位圖掃描順序是從圖片的左下角像素由左至右,由下至上進(jìn)行掃描的

責(zé)任編輯:

標(biāo)簽:

相關(guān)推薦:

精彩放送:

新聞聚焦
Top