BMP文件存儲結構的格式可以在Windows中的WINGDI_第1頁
BMP文件存儲結構的格式可以在Windows中的WINGDI_第2頁
BMP文件存儲結構的格式可以在Windows中的WINGDI_第3頁
BMP文件存儲結構的格式可以在Windows中的WINGDI_第4頁
BMP文件存儲結構的格式可以在Windows中的WINGDI_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

BMP文件存儲結構的格式可以在Windows中的WINGDI.h文件中找到定義。BMP文件總體上由4部分組成,分別是位圖文件頭、位圖信息頭、調色板和圖像數據,如表5-1所示。表5-1BMP文件的組成結構位圖文件頭(bitmap-fileheader)位圖信息頭(bitmap-informationheader)彩色表/調色板(colortable)位圖數據(bitmap-data)下面來詳細看一下每個組成部分的細節(jié)。1.位圖文件頭(bitmap-fileheader)位圖文件頭(bitmap-fileheader)包含了圖像類型、圖像大小、圖像數據存放地址和兩個保留未使用的字段。打開WINGDI.h文件,搜索"BITMAPFILEHEADER"就可以定位到BMP文件的位圖文件頭的數據結構定義。typedefstructtagBITMAPFILEHEADER{

WORD

bfType;

DWORD

bfSize;

WORD

bfReserved1;

WORD

bfReserved2;

DWORD

bfOffBits;

}BITMAPFILEHEADER,FAR*LPBITMAPFILEHEADER,*PBITMAPFILEHEADER;表5-2列出了tagBITMAPFILEHEADER中各字段的含義。表5-2tagBITMAPFILEHEADER結構字段名大?。▎挝唬鹤止?jié))描述bfType2位圖類別,根據不同的操作系統而不同,在Windows中,此字段的值總為‘BM’bfSize4BMP圖像文件的大小bfReserved12總為0bfReserved22總為0bfOffBits4BMP圖像數據的地址2.位圖信息頭(bitmap-informationheader)位圖信息頭(bitmap-informationheader)包含了位圖信息頭的大小、圖像的寬高、圖像的色深、壓縮說明圖像數據的大小和其他一些參數。打開WINGDI.h文件,搜索"tagBITMAPINFOHEADER"就可以定位到BMP文件的位圖信息頭的數據結構定義。typedefstructtagBITMAPINFOHEADER{

DWORD

biSize;

LONG

biWidth;

LONG

biHeight;

WORD

biPlanes;

WORD

biBitCount;

DWORD

biCompression;

DWORD

biSizeImage;

LONG

biXPelsPerMeter;

LONG

biYPelsPerMeter;

DWORD

biClrUsed;

DWORD

biClrImportant;

}BITMAPINFOHEADER,FAR*LPBITMAPINFOHEADER,*PBITMAPINFOHEADER;表5-3列出了tagBITMAPFILEHEADER中各字段的含義。表5-3tagBITMAPFILEHEADER結構字段名大?。▎挝唬鹤止?jié))描述biSize4本結構的大小,根據不同的操作系統而不同,在Windows中,此字段的值總為28h字節(jié)=40字節(jié)biWidth4BMP圖像的寬度,單位像素biHeight4總為0biPlanes2總為0biBitCount2BMP圖像的色深,即一個像素用多少位表示,常見有1、4、8、16、24和32,分別對應單色、16色、256色、16位高彩色、24位真彩色和32位增強型真彩色biCompression4壓縮方式,0表示不壓縮,1表示RLE8壓縮,2表示RLE4壓縮,3表示每個像素值由指定的掩碼決定biSizeImage4BMP圖像數據大小,必須是4的倍數,圖像數據大小不是4的倍數時用0填充補足biXPelsPerMeter4水平分辨率,單位像素/mbiYPelsPerMeter4垂直分辨率,單位像素/mbiClrUsed4BMP圖像使用的顏色,0表示使用全部顏色,對于256色位圖來說,此值為100h=256biClrImportant4重要的顏色數,此值為0時所有顏色都重要,對于使用調色板的BMP圖像來說,當顯卡不能夠顯示所有顏色時,此值將輔助驅動程序顯示顏色3.彩色表/調色板(colortable)彩色表/調色板(colortable)是單色、16色和256色圖像文件所特有的,相對應的調色板大小是2、16和256,調色板以4字節(jié)為單位,每4個字節(jié)存放一個顏色值,圖像的數據是指向調色板的索引??梢詫⒄{色板想象成一個數組,每個數組元素的大小為4字節(jié),假設有一256色的BMP圖像的調色板數據為:調色板[0]=黑、調色板[1]=白、調色板[2]=紅、調色板[3]=藍…調色板[255]=黃圖像數據010002FF表示調用調色板[1]、調色板[0]、調色板[2]和調色板[255]中的數據來顯示圖像顏色。在早期的計算機中,顯卡相對比較落后,不一定能保證顯示所有顏色,所以在調色板中的顏色數據應盡可能將圖像中主要的顏色按順序排列在前面,位圖信息頭的biClrImportant字段指出了有多少種顏色是重要的。每個調色板的大小為4字節(jié),按藍、綠、紅存儲一個顏色值。打開WINGDI.h文件,搜索"tagRGBTRIPLE"就可以定位到BMP文件的調色板的數據結構定義。typedefstructtagRGBQUAD{

BYTE

rgbBlue;

BYTE

rgbGreen;

BYTE

rgbRed;

BYTE

rgbReserved;

}RGBQUAD;表5-4列出了tagRGBTRIPLE中各字段的含義。表5-4tagRGBTRIPLE結構字段名大?。▎挝唬鹤止?jié))描述rgbBlue1藍色值rgbGreen1綠色值rgbRed1紅色值rgbReserved1保留,總為04.位圖數據(bitmap-data)如果圖像是單色、16色和256色,則緊跟著調色板的是位圖數據,位圖數據是指向調色板的索引序號。如果位圖是16位、24位和32位色,則圖像文件中不保留調色板,即不存在調色板,圖像的顏色直接在位圖數據中給出。16位圖像使用2字節(jié)保存顏色值,常見有兩種格式:5位紅5位綠5位藍和5位紅6位綠5位藍,即555格式和565格式。555格式只使用了15位,最后一位保留,設為0。24位圖像使用3字節(jié)保存顏色值,每一個字節(jié)代表一種顏色,按紅、綠、藍排列。32位圖像使用4字節(jié)保存顏色值,每一個字節(jié)代表一種顏色,除了原來的紅、綠、藍,還有Alpha通道,即透明色。如果圖像帶有調色板,則位圖數據可以根據需要選擇壓縮與不壓縮,如果選擇壓縮,則根據BMP圖像是16色或256色,采用RLE4或RLE8壓縮算法壓縮。RLE4是壓縮16色圖像數據的,RLE4采用表5-5所示方式壓縮數據。表5-5RLE4壓縮方法方案1字節(jié)2字節(jié)3字節(jié)4字節(jié)N字節(jié)A重復次數顏色索引

B設為0后面有效的顏色索引數顏色索引顏色索引顏色索引…假設有如下16色位圖數據,共20字節(jié),數據使用了RLE4壓縮:0500040500080905040004050809040807010000數據解壓時首先讀取05,因為05不等于0,所以選擇A方案,根據A方案,05表示后面數據重復的次數,接著讀取00,00表示有兩個顏色索引,每個索引占4位,第一個像素在高4位,第二個像素在低4位,即在一個字節(jié)中低像素在高位,高像素在低位。0500解壓后等于00000。讀取04,選擇A方案,按照上面的操作解析,04是后面數據重復的次數,05是兩個顏色索引,第3個顏色索引為5,第4個顏色索引為0。0405解壓后等于0505。讀取00,選擇B方案,讀取08,08表示后面有效的顏色索引數。0008解壓后等于09050400。讀取04,選擇A方案,按照上面的操作解析,04是后面數據重復的次數,05是兩個顏色索引。0405解壓后等于0505。讀取08,選擇A方案,按照上面的操作解析,08是后面數據重復的次數,09是兩個顏色索引。0809解壓后等于09090909。

讀取04,選擇A方案,按照上面的操作解析,04是后面數據重復的次數,08是兩個顏色索引。0408解壓后等于0808。讀取07,選擇A方案,按照上面的操作解析,07是后面數據重復的次數,01是兩個顏色索引。0701解壓后等于0101010。讀取00,選擇B方案,讀取00,00表示后面有效的顏色索引數,0表示無,即解壓完一行數據。綜合上面的操作,解壓后的數據為:0000005050905040005050909090908080101010看上去和原來的數據大小一樣,沒有體現到壓縮效果,這是因為上面的例子只選擇了20字節(jié)數據,而且這20字節(jié)數據中重復的數據不多,使用RLE壓縮重復數據不多的數據時,有時可能壓縮后的大小反而比原來的數據還大。其實一般情況下當數據比較多而且重復的時候,使用RLE壓縮效果還是比較理想的。RLE8的壓縮方式可以參考上面的RLE4解壓方法,惟一的區(qū)別是RLE8使用1個字節(jié)存放顏色索引,而RLE4使用4位存放顏色索引。結合上面對BMP文件的分析,下面分別對256色和24位色的BMP圖像進行十六進制分析,通過在十六進制編輯器中分析文件結構,能夠增加分析文件的經驗。如圖5-1和圖5-2所示,分別為256色BMP圖像cat2.bmp和24位色BMP圖像cat1.bmp。其中cat2.bmp圖像的分辨率為200×153,文件大小為31680字節(jié)。cat1.bmp圖像的分辨率為200×150,文件大小為90056字節(jié)。圖5-1

cat2.bmp圖像圖5-2

cat1.bmp圖像現在來分析cat2.bmp的圖像文件,在Winhex中打開cat2.bmp,如圖5-3所示。(點擊查看大圖)圖5-3

在Winhex中打開cat2.bmp圖像文件首先分析位圖文件頭的結構,如圖5-4所示。根據BMP文件的位圖文件頭結構定義分析出cat2.bmp圖像的位圖文件頭中各字段的含義,如表5-6所示。(點擊查看大圖)圖5-4

cat2.bmp圖像文件的位圖文件頭表5-6cat2.bmp圖像文件中位圖文件頭各字段的含義十六進制值描述424D:BM的ASCII值,在Windows中的BMP文件標識符C07B00007BC0h=31680,是cat2文件的大小00000000保留值,總為0360400436h=1078,是圖像數據的地址,即文件頭+信息頭+調色板的長度繼續(xù)分析接下來的數據,根據BMP文件結構的定義,接下來的數據是位圖信息頭,cat2.bmp圖像文件的位圖信息頭的內容如圖5-5所示。(點擊查看大圖)圖5-5

cat2.bmp圖像的位圖信息頭表5-7所示為cat2.bmp圖像文件中位圖信息頭各字段的含義。表5-7cat2.bmp圖像文件中位圖信息頭各字段的含義十六進制值描述28000000:cat2.bmp圖像的位圖信息頭大小C8000000000000C8=200,是cat2圖像的寬度,單位像素9900000000000099=153,是cat2圖像的高度,單位像素0100總是108000008=8,cat2圖像的色深,即2的8次冪等于256色00000000壓縮方式,0表示不壓縮8A7700000000778A=30602,是cat2圖像的圖像數據大小,單位字節(jié)120B000000000B12=2834,cat2圖像的水平分辨率,單位像素/m120B000000000B12=2834,cat2圖像的垂直分辨率,單位像素/m00000000cat2圖像使用的顏色數,0表示使用全部顏色00000000cat2圖像中重要的顏色數,0表示所有顏色都重要繼續(xù)分析接下來的數據,根據BMP文件結構的定義,因為cat2.bmp圖像是256色的位圖,所以應該有256個調色板,每個調色板占4字節(jié),整個調色板一共1024字節(jié)大小。cat2.bmp圖像文件的調色板數據如圖5-6和圖5-7所示。(點擊查看大圖)圖5-6

cat2.bmp圖像的調色板地址從00000036h開始存儲(點擊查看大圖)圖5-7

cat2.bmp圖像的調色板數據結束地址是00000435h從圖5-6和圖5-7中可以看出,cat2.bmp圖像的調色板地址從00000036h開始到00000435h結束,即00000435h-00000036h+1=400h=1024。如果想查看cat2圖像的調色板對應的實際顯示顏色,可以使用AdobePhotoshopCS打開cat2.bmp,在AdobePhotoshopCS的菜單欄中選擇"圖像"→"模式"→"顏色表",即可觀看cat2的調色板,如圖5-8所示。圖5-8

在AdobePhotoshopCS中查看cat2的調色板圖5-8所示cat2.bmp的調色板顏色和圖5-6中的十六進制數據是一一對應的。在AdobePhotoshopCS的調色板上單擊任何一個像素的顏色即可彈出一個拾色器對話框顯示該像素顏色的詳細組成信息。cat2.bmp調色板和cat2.bmp的十六進制數據的對應關系如圖5-9所示。繼續(xù)分析接下來的數據,根據BMP文件結構的定義,如果一個圖像有調色板,那么緊跟在調色板后面的是圖像的數據,這些數據不是實際的顏色值,而是指向調色板數組的索引,根據索引來獲取調色板中的顏色,如圖5-10所示。(點擊查看大圖)圖5-9

cat2.bmp調色板和cat2.bmp的十六進制數據的對應關系(點擊查看大圖)圖5-10

cat2.bmp的圖像數據因為cat2.bmp是256色的位圖,即采用了8位色深作為指向調色板數組的索引,所以根據圖5-10中顯示的數據可以得知:494949B1494949494999表示cat2.bmp位圖左下角第1個像素的顏色等于調色板[49],第2個像素的顏色等于調色板[49],第3個像素的顏色等于調色板[49],第4個像素的顏色等于調色板[B1]……依此類推。分析完cat2.bmp圖像之后,接下來分析的是cat1.bmp。cat1.bmp圖像是24位色圖像,根據BMP文件結構定義得知,cat1.bmp圖像沒有調色板,圖像數據存儲的是實際的顏色數據,每個像素用3字節(jié)表示,分別是紅綠藍。由于cat1.bmp和cat2.bmp的位圖文件頭和位圖信息頭結構一樣,所以cat1.bmp的位圖文件頭和位圖信息頭可以參考上面對cat2.bmp的分析

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論