僅此一次對BMP檔案做詳細分析的機會,想了解的朋友千萬不能錯過
由於BMP檔案格式是Windows環境中交換與圖有關的資料的一種標準,因此在Windows環境中執行的圖形影像軟體都支援BMP影像格式。
典型的BMP影像檔案由三部分組成:點陣圖檔案頭資料結構,它包含BMP影像檔案的型別、顯示內容等資訊;點陣圖資訊資料結構,它包含有BMP影像的寬、高、壓縮方法,以及定義顏色等資訊
如某BMP檔案開頭:
BMP檔案可分為四個部分:點陣圖檔案頭、點陣圖資訊頭、彩色板、影像資料陣列,在上圖中已用*分隔。
一、影像檔案頭
1)1:影像檔案頭。424Dh=”BM”,表示是Windows支援的BMP格式。
2)2-3:整個檔案大小。4690 0000,為00009046h=36934。
3)4-5:保留,必須設定為0。
4)6-7:從檔案開始到點陣圖資料之間的偏移量。4600 0000,為00000046h=70,上面的檔案頭就是35字=70位元組。
5)8-9:點陣圖圖資訊頭長度。
6)10-11:點陣圖寬度,以畫素為單位。8000 0000,為00000080h=128。
7)12-13:點陣圖高度,以畫素為單位。9000 0000,為00000090h=144。
8)14:點陣圖的位面數,該值總是1。0100,為0001h=1。
二、點陣圖資訊頭
9)15:每個畫素的位數。有1(單色),4(16色),8(256色),16(64K色,高彩色),24(16M色,真彩色),32(4096M色,增強型真彩色)。1000為0010h=16。
10)16-17:壓縮說明:有0(不壓縮),1(RLE 8,8位RLE壓縮),2(RLE 4,4位RLE壓縮,3(Bitfields,位域存放)。RLE簡單地說是採用畫素數+畫素值的方式進行壓縮。T408採用的是位域存放方式,用兩個位元組表示一個畫素,位域分配為r5b6g5。圖中0300 0000為00000003h=3。
11)18-19:用位元組數表示的點陣圖資料的大小,該數必須是4的倍數,數值上等於點陣圖寬度×點陣圖高度×每個畫素位數。0090 0000為00009000h=80×90×2h=36864。
12)20-21:用象素/米表示的水平解析度。A00F 0000為0000 0FA0h=4000。
13)22-23:用象素/米表示的垂直解析度。A00F 0000為0000 0FA0h=4000。
14)24-25:點陣圖使用的顏色索引數。設為0的話,則說明使用所有調色盤項。
15)26-27:對圖象顯示有重要影響的顏色索引的數目。如果是0,表示都重要。
三、彩色板 (非必有)
1 6)28-35: 彩色板規範。 對於調色盤中的每個表項,用下述方法來描述RGB的值:
1位元組用於藍色分量
1位元組用於綠色分量
1位元組用於紅色分量
1位元組用於填充符(設定為0)
對於24-位真彩色影像就不使用彩色板,因為點陣圖中的RGB值就代表了每個象素的顏色。
如,彩色板為00F8 0000 E007 0000 1F00 0000 0000 0000,其中:
00FB 0000為FB00h=1111100000000000(二進位制),是紅色分量的掩碼。
E007 0000為 07E0h=0000011111100000(二進位制),是綠色分量的掩碼。
1F00 0000為001Fh=0000000000011111(二進位制),是紅色分量的掩碼。
0000 0000總設定為0。
將掩碼跟畫素值進行“與”運算再進行移位操作就可以得到各色分量值。看看掩碼,就可以明白事實上在每個畫素值的兩個位元組16位中,按從高到低取5、6、5位分別就是r、g、b分量值。取出分量值後把r、g、b值分別乘以8、4、8就可以補齊第個分量為一個位元組,再把這三個位元組按rgb組合,放入儲存器(同樣要反序),就可以轉換為24位標準BMP格式了。
四、影像資料陣列
17)17-...:每兩個位元組表示一個畫素。陣列中的第一個位元組表示點陣圖左下角的象素,而最後一個位元組表示點陣圖右上角的象素。
下面用winhex開啟一個bmp檔案,察看其16進位制資料。
1、BITMAPFILEHEADER的第2個屬性是bfSize(4位元組),表示整個bmp檔案的大小,這裡等於0x000004F8=1272位元組。
2、BITMAPFILEHEADER的第3個、第4個屬性分別是bfReserved1、bfReserved2(各2位元組),這裡是2個保留屬性,都為0,這裡等於&H0000、0×0000。
3、BITMAPFILEHEADER的第5個屬性是bfOffBits(4位元組),表示DIB資料區在bmp檔案中的位置偏移量,這裡等於0×00000076=118,表示資料區從檔案開始往後數的118位元組開始。
4、BITMAPFILEHEADER結構體這裡就講完了,大家會發現BITMAPFILEHEADER只佔了bmp檔案開始的14位元組長度,但需要 特別說明的是在vb中定義一個BITMAPFILEHEADER結構體變數,其長度佔了16個位元組,原因就是第1個屬性本來應該只分配2個位元組,但實際被 分配了4個位元組,多出來2個位元組,所以如果想儲存一張bmp圖片,寫入BITMAPFILEHEADER結構體時一定要注意這一點。
下面進入正題BITMAPINFOHEADER部分。
1、BITMAPINFOHEADER的第1個屬性是biSize(4位元組),表示BITMAPINFOHEADER結構體的長度,最常見的長度是40位元組,UltraEdit中可以看到緊接著的4個位元組等於0×00000028=40位元組。
2、BITMAPINFOHEADER的第2個屬性是biWidth(4位元組),表示bmp圖片的寬度,這裡等於0×00000030=48畫素。
3、BITMAPINFOHEADER的第3個屬性是biHeight(4位元組),表示bmp圖片的高度,這裡等於0×00000030=48畫素。
4、BITMAPINFOHEADER的第4個屬性是biPlanes(2位元組),表示bmp圖片的平面屬,顯然顯示器只有一個平面,所以恆等於1,這裡等於0×0001。
5、BITMAPINFOHEADER的第5個屬性是biBitCount(2位元組),表示bmp圖片的顏色位數,即24點陣圖、32點陣圖等等。這裡等於0×0004,表示該圖片為4點陣圖。
6、BITMAPINFOHEADER的第6個屬性是biCompression(4位元組),表示圖片的壓縮屬性,bmp圖片是不壓縮的,等於0,所以這裡為0×00000000。
7、BITMAPINFOHEADER的第7個屬性是biSizeImage(4位元組),表示bmp圖片資料區的大小,當上一個熟悉biCompression等於0時,這裡的值可以省略不填,所以這裡等於0×00000000。
8、BITMAPINFOHEADER的第8個屬性是biXPelsPerMeter(4位元組),表示圖片X軸每米多少畫素,可省略,這裡等於0x00000EC3=3779畫素/米。
9、BITMAPINFOHEADER的第9個屬性是biYPelsPerMeter(4位元組),表示圖片Y軸每米多少畫素,可省略,這裡等於0x00000EC3=3779畫素/米。
10、BITMAPINFOHEADER的第10個屬性是biClrUsed(4位元組),表示使用了多少個顏色索引表,一般biBitCount屬性小於16才會用到,等於0時表示有2^biBitCount個顏色索引表,所以這裡仍等於0×00000000。
11、BITMAPINFOHEADER的第11個屬性是biClrImportant(4位元組),表示有多少個重要的顏色,等於0時表示所有顏色都很重要,所以這裡等於0×00000000。
至此BITMAPINFOHEADER結構體結束。
編號:(藍,綠,紅,空)
0號:(00,00,00,00)
1號:(00,00,80,00)
2號:(00,80,00,00)
3號:(00,80,80,00)
4號:(80,00,00,00)
5號:(80,00,80,00)
6號:(80,80,00,00)
7號:(80,80,80,00)
8號:(C0,C0,C0,00)
9號:(00,00,FF,00)
10號:(00,FF,00,00)
11號:(00,FF,FF,00)
12號:(FF,00,00,00)
13號:(FF,00,FF,00)
14號:(FF,FF,00,00)
15號:(FF,FF,FF,00)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31380569/viewspace-2668037/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- BMP檔案詳解
- 詳細記錄一次npm i canvas報錯的解決過程NPMCanvas
- BMP檔案結構
- HDFS讀檔案過程分析:獲取檔案對應的Block列表BloC
- 還不點開?免費開源的koahub微商城原始碼,僅此一次!原始碼
- resin配置檔案的詳細解釋
- 在 WEB 端可以對檔案做多維分析的 BI 軟體Web
- BMP檔案結構 (轉)
- 【原創】 一個會計軟體的演算法分析過程(詳細)演算法
- bmp是什麼格式的檔案 怎麼把jpg轉換為bmp
- 討論用jetspeed做專案的朋友!!
- 對尼姆達蠕蟲的詳細分析 (轉)
- 你值得擁有的6款檔案管理軟體,千萬不要錯過哦
- 將bmp檔案壓縮為jpg檔案
- 本機檔案不能共享的解決方法
- Linux:査看檔案的詳細資訊Linux
- 看詳細到秒的檔案時間
- Android的.so檔案詳細解讀Android
- 一文了解Python反射機制(很詳細)Python反射
- 讓emacs完美顯示BMP檔案的辦法Mac
- 一次歸檔報錯的處理和分析
- PE檔案格式詳細解析(五)-- 除錯UPX壓縮的notepad程式除錯
- 錯誤 5173:不能使檔案與不同的資料庫相關,測試過,能行。資料庫
- 沒 Google 印鈔機的命,就千萬不能得它的病Go
- Python爬蟲:通過做專案,小編了解了酷狗音樂的加密過程Python爬蟲加密
- 詳細分析Java中斷機制Java
- 好用的企業網盤工具千萬不要錯過
- 記一次VMware的崩潰除錯分析過程除錯
- 一次詳細的RAC 節點例項驅逐分析文件
- CSDN-遮蔽廣告詳細方法 僅對谷歌瀏覽器有效!谷歌瀏覽器
- Java對各種檔案的操作詳解Java
- 6個程式設計實戰網站,想學程式設計的你不能錯過!程式設計網站
- 你絕對不能錯過的流程圖製作軟體!真心好用!流程圖
- sessionbean +bmp取值出錯的問題SessionBean
- PE檔案格式詳細解析(一)
- Nginx配置檔案詳細說明Nginx
- Struts配置檔案詳細講解
- Python:檔案操作詳細教程Python