聯系我們 - 廣告服務 - 聯系電話:
您的當前位置: > 關注 > > 正文

當前速看:bmp格式解析 Windows3.0:位圖文件格式與顯示設備無關

來源:CSDN 時間:2023-02-24 11:21:47


(資料圖)

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

如下的4x4像素的位圖

經過UE打開成16進制文件后,顯示如下:

我們可以通過查找對應的數據位來驗證上面所分析的各部分信息。這樣就比較清楚了。 24位真彩色的數據格式為  B(8位)G(8位)R(8位),這是由于低字節在前造成的。  (6)位圖操作常使用的結構體        位圖頭文件結構: typedef struct tagBITMAPFILEHEADER{short bfType;      int bfSize;      short bfReserved1;      short bfReserved2;      int bfOffBits; }BITMAPFILEHEADER, *PBITMAPFILEHEADER;       位圖信息結構: 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位圖掃描順序是從圖片的左下角像素由左至右,由下至上進行掃描的

責任編輯:

標簽:

相關推薦:

精彩放送:

新聞聚焦
Top 岛国精品在线