BMP文件相關(guān)的技術(shù)文檔,網(wǎng)上可以找到太多了,但這些文檔都只適合專業(yè)的人去看,所以我寫(xiě)了這篇貌似菜鳥(niǎo)能看懂的文章,但愿它不只是貌似而已。閱讀本文前最好先看看《顏色的RGB數(shù)字表示方法》。 什么是位圖計(jì)算機(jī)能以位圖和矢量圖格式顯示圖像。 位圖(Bitmap)圖像又稱點(diǎn)陣圖或光柵圖,它使用我們稱為像素(象素,Pixel)的一格一格的小點(diǎn)來(lái)描述圖像。計(jì)算機(jī)屏幕其實(shí)就是一張包含大量像素點(diǎn)的網(wǎng)格。當(dāng)我們把位圖放大時(shí),每一個(gè)像素小點(diǎn)看上去就像是一個(gè)個(gè)馬賽克色塊。 矢量圖(Vector)使用直線和曲線來(lái)描述圖形,這些圖形的元素是一些點(diǎn)、線、矩形、多邊形、圓和弧線等等,它們都是通過(guò)數(shù)學(xué)公式計(jì)算獲得的。 位圖和矢量圖最簡(jiǎn)單的區(qū)別就是:矢量圖可以無(wú)限放大,而且不會(huì)失真;而位圖則不能。 像Photoshop(PS)這樣主要用于處理位圖的軟件,我們稱之為圖像處理軟件;專門處理矢量圖的軟件,我們稱之為圖形設(shè)計(jì)軟件,例如Adobe Illustrator,CorelDRAW,F(xiàn)lash MX等。 BMP位圖文件常見(jiàn)的圖像文件格式有:BMP、JPG(JPE,JPEG)、GIF等。 BMP圖像文件(Bitmap-File)格式是Windows采用的圖像文件存儲(chǔ)格式,在Windows環(huán)境下運(yùn)行的所有圖像處理軟件都支持這種格式。Windows 3.0以后的BMP文件都是指設(shè)備無(wú)關(guān)位圖(DIB,device-independent bitmap)。BMP位圖文件默認(rèn)的文件擴(kuò)展名是.BMP,有時(shí)它也會(huì)以.DIB或.RLE作擴(kuò)展名。 創(chuàng)建BMP文件打開(kāi)Photoshop,新建一個(gè)尺寸為2*3像素的文件。 放大圖片到最大(1600%),然后用鉛筆工具對(duì)每個(gè)像素都點(diǎn)一個(gè)不同顏色的點(diǎn),如下圖所示。 儲(chǔ)存這個(gè)文件為BMP格式,文件名為“MyBmp.bmp”,在BMP選項(xiàng)中選擇Windows,24位。 BMP文件結(jié)構(gòu)BMP文件由4部分組成:
24位真彩色位圖沒(méi)有顏色表,所以只有1、2、4這三部分。 用UltraEdit打開(kāi)MyBmp.bmp,可以看到這個(gè)文件的全部數(shù)據(jù)如下圖所示: 位圖文件頭位圖文件頭分4部分,共14字節(jié):
注意,Windows的數(shù)據(jù)是倒著念的,這是PC電腦的特色。如果一段數(shù)據(jù)為50 1A 25 3C,倒著念就是3C 25 1A 50,即0x3C251A50。因此,如果bfSize的數(shù)據(jù)為50 00 00 00,實(shí)際上就成了0x00000050,也就是0x50。 位圖信息頭位圖信息頭共40字節(jié):
作為真彩色位圖,我們主要關(guān)心的是biWidth和biHeight這兩個(gè)數(shù)值,兩個(gè)數(shù)值告訴我們圖像的尺寸。biSize,biPlanes,biBitCount這幾個(gè)數(shù)值是固定的。想偷懶的話,其它的數(shù)值可以一律用0來(lái)填充。 顏色表24位真彩色位圖沒(méi)有顏色表。要想在Photoshop中創(chuàng)建有顏色表的BMP圖像,選擇圖像>模式>索引顏色;要想查看顏色表,選擇圖像>模式>顏色表。本文為了簡(jiǎn)化,只討論24位真彩色位圖。 顏色點(diǎn)陣數(shù)據(jù)位圖全部的像素,是按照自下向上,自左向右的順序排列的。 RGB數(shù)據(jù)也是倒著念的,原始數(shù)據(jù)是按B、G、R的順序排列的。 你應(yīng)該注意到圖中用黑色框起來(lái)的00 00了,在每行顏色的末尾添加的兩個(gè)0字節(jié),是為了行補(bǔ)位。為什么要行補(bǔ)位呢?因?yàn)?2位的Windows操作系統(tǒng)處理4個(gè)字節(jié)(32位)的速度比較快,所以BMP的每一行顏色占用的字節(jié)數(shù)規(guī)定為4的整數(shù)倍。MyBmp.bmp中一行顏色有兩個(gè)像素,共占用6字節(jié),如果要補(bǔ)齊4*2=8字節(jié),就要再加兩個(gè)0字節(jié)。 行補(bǔ)位的公式為:widthBytes = (width*biBitCount+31)/32*4 Phtoshop在文件的末尾還補(bǔ)充了兩個(gè)0字節(jié),好像是要整體補(bǔ)位。不過(guò)我看過(guò)的BMP資料中都沒(méi)有提到還要整體補(bǔ)位的,其它軟件生成的BMP文件也沒(méi)有整體補(bǔ)位的,這看起來(lái)像是Adobe的獨(dú)創(chuàng),不知道目的何在。 Photoshop和Windows的BMP文件比較用Photoshop保存的MyBmp.bmp: 經(jīng)Windows畫(huà)圖轉(zhuǎn)存過(guò)的BMP文件: 可以看出Windows的BMP文件最后少了兩個(gè)0字節(jié),沒(méi)有整體補(bǔ)位。bfSize(文件大小),biSizeImage(全部像素大小)也相應(yīng)地減去2。 相關(guān)資料 |
|
來(lái)自: 昵稱54060840 > 《待分類》