成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

北亞工程師詳細解說BMP文件格式-創(chuàng)新互聯(lián)

BMP是一種與硬件設(shè)備無關(guān)的圖像文件格式,使用非常廣。它采用位映射存儲格式,除了圖像深度可選以外,不采用其他任何壓縮,因此,BblP文件所占用的空間很大。BMP文件的圖像深度可選lbit、4bit、8bit及24bit。BMP文件存儲數(shù)據(jù)時,圖像的掃描方式是按從左到右、從下到上的順序。

創(chuàng)新互聯(lián)致力于互聯(lián)網(wǎng)網(wǎng)站建設(shè)與網(wǎng)站營銷,提供成都網(wǎng)站制作、成都做網(wǎng)站、網(wǎng)站開發(fā)、seo優(yōu)化、網(wǎng)站排名、互聯(lián)網(wǎng)營銷、微信小程序定制開發(fā)、公眾號商城、等建站開發(fā),創(chuàng)新互聯(lián)網(wǎng)站建設(shè)策劃專家,為不同類型的客戶提供良好的互聯(lián)網(wǎng)應用定制解決方案,幫助客戶在新的全球化互聯(lián)網(wǎng)環(huán)境中保持優(yōu)勢。

  由于BMP文件格式是Windows環(huán)境中交換與圖有關(guān)的數(shù)據(jù)的一種標準,因此在Windows環(huán)境中運行的圖形圖像軟件都支持BMP圖像格式。

  典型的BMP圖像文件由三部分組成:位圖文件頭數(shù)據(jù)結(jié)構(gòu),它包含BMP圖像文件的類型、顯示內(nèi)容等信息;位圖信息數(shù)據(jù)結(jié)構(gòu),它包含有BMP圖像的寬、高、壓縮方法,以及定義顏色等信息。

  具體數(shù)據(jù)舉例:

  如某BMP文件開頭:

424D 4690 0000 0000 0000 4600 0000 2800 0000 8000 0000 9000 0000 0100*1000 0300 0000 0090 0000 A00F 0000 A00F 0000 0000 0000 0000 0000*00F8 0000 E007 0000 1F00 0000 0000 0000*02F1 84F1 04F1 84F1 84F1 06F2 84F1 06F2 04F2 86F2 06F2 86F2 86F2 …. ….

  BMP文件可分為四個部分:位圖文件頭、位圖信息頭、彩色板、圖像數(shù)據(jù)陣列,在上圖中已用*分隔。

一、圖像文件頭

1)1:圖像文件頭。424Dh=”BM”,表示是Windows支持的BMP格式。

2)2-3:整個文件大小。4690 0000,為00009046h=36934。

3)4-5:保留,必須設(shè)置為0。

4)6-7:從文件開始到位圖數(shù)據(jù)之間的偏移量。4600 0000,為00000046h=70,上面的文件頭就是35字=70字節(jié)。

5)8-9:位圖圖信息頭長度。

6)10-11:位圖寬度,以像素為單位。8000 0000,為00000080h=128。

7)12-13:位圖高度,以像素為單位。9000 0000,為00000090h=144。

8)14:位圖的位面數(shù),該值總是1。0100,為0001h=1。

二、位圖信息頭

9)15:每個像素的位數(shù)。有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簡單地說是采用像素數(shù)+像素值的方式進行壓縮。T408采用的是位域存放方式,用兩個字節(jié)表示一個像素,位域分配為r5b6g5。圖中0300 0000為00000003h=3。

11)18-19:用字節(jié)數(shù)表示的位圖數(shù)據(jù)的大小,該數(shù)必須是4的倍數(shù),數(shù)值上等于位圖寬度×位圖高度×每個像素位數(shù)。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:位圖使用的顏色索引數(shù)。設(shè)為0的話,則說明使用所有調(diào)色板項。

15)26-27:對圖象顯示有重要影響的顏色索引的數(shù)目。如果是0,表示都重要。

三、彩色板 (非必有)

16)28-35:彩色板規(guī)范。對于調(diào)色板中的每個表項,用下述方法來描述RGB的值:

1字節(jié)用于藍色分量

1字節(jié)用于綠色分量

1字節(jié)用于紅色分量

1字節(jié)用于填充符(設(shè)置為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總設(shè)置為0。

  將掩碼跟像素值進行“與”運算再進行移位操作就可以得到各色分量值??纯囱诖a,就可以明白事實上在每個像素值的兩個字節(jié)16位中,按從高到低取5、6、5位分別就是r、g、b分量值。取出分量值后把r、g、b值分別乘以8、4、8就可以補齊第個分量為一個字節(jié),再把這三個字節(jié)按rgb組合,放入存儲器(同樣要反序),就可以轉(zhuǎn)換為24位標準BMP格式了。

四、圖像數(shù)據(jù)陣列

17)17-...:每兩個字節(jié)表示一個像素。陣列中的第一個字節(jié)表示位圖左下角的象素,而最后一個字節(jié)表示位圖右上角的象素。

  下面用winhex打開一個bmp文件,察看其16進制數(shù)據(jù)。

  一個bmp文件以BITMAPFILEHEADER結(jié)構(gòu)體開始,(frombyte.com)BITMAPFILEHEADER的第1個屬性是bfType(2字節(jié)),這里恒定等于0x4D42。由于內(nèi)存中的數(shù)據(jù)排列高位在左,低位在右,所以內(nèi)存中從左往右看就顯示成(42 4D),所以在winhex中頭兩個 字節(jié)顯示為(42 4D)就是這樣形成的,以后的數(shù)據(jù)都是這個特點,不再作重復說明。

  BITMAPFILEHEADER的第2個屬性是bfSize(4字節(jié)),表示整個bmp文件的大小,這里等于0x000004F8=1272字節(jié)。

  BITMAPFILEHEADER的第3個、第4個屬性分別是bfReserved1、bfReserved2(各2字節(jié)),這里是2個保留屬性,都為0,這里等于&H0000、0×0000。

  BITMAPFILEHEADER的第5個屬性是bfOffBits(4字節(jié)),表示DIB數(shù)據(jù)區(qū)在bmp文件中的位置偏移量,這里等于0×00000076=118,表示數(shù)據(jù)區(qū)從文件開始往后數(shù)的118字節(jié)開始。

  BITMAPFILEHEADER結(jié)構(gòu)體這里就講完了,大家會發(fā)現(xiàn)BITMAPFILEHEADER只占了bmp文件開始的14字節(jié)長度,但需要 特別說明的是在vb中定義一個BITMAPFILEHEADER結(jié)構(gòu)體變量,其長度占了16個字節(jié),原因就是第1個屬性本來應該只分配2個字節(jié),但實際被 分配了4個字節(jié),多出來2個字節(jié),所以如果想保存一張bmp圖片,寫入BITMAPFILEHEADER結(jié)構(gòu)體時一定要注意這一點。

  接下來是BITMAPINFO結(jié)構(gòu)體部分。BITMAPINFO(frombyte.com)段由兩部分組成:BITMAPINFOHEADER結(jié)構(gòu)體和RGBQUAD結(jié)構(gòu) 體。其中RGBQUAD結(jié)構(gòu)體表示圖片的顏色信息,有些時候可以省略,一般的24位圖片和32位圖片都不帶RGBQUAD結(jié)構(gòu)體,因為DIB數(shù)據(jù)區(qū)直接表 示的RGB值,一般4位圖片和8位圖片才帶有RGBQUAD結(jié)構(gòu)體。(多少位的圖片就是用多少位來表示一個顏色信息,例如4位圖片表示用4個bit來表示 一個顏色信息。)一個bmp文件中有沒有RGBQUAD結(jié)構(gòu)體,可以根據(jù)前面BITMAPFILEHEADER結(jié)構(gòu)體的第5個屬性bfOffBits來判 斷,因為BITMAPINFOHEADER結(jié)構(gòu)體長度為40bit,如果BITMAPINFOHEADER結(jié)構(gòu)體結(jié)束后還未到DIB數(shù)據(jù)區(qū)的偏移量,就說 明接下來的數(shù)據(jù)是RGBQUAD結(jié)構(gòu)體部分。這里講的C:\WINDOWS\Blue Lace 16.bmp是一個4bit圖片,所以它帶有 RGBQUAD結(jié)構(gòu)體。

  下面進入正題BITMAPINFOHEADER部分。

BITMAPINFOHEADER的第1個屬性是biSize(4字節(jié)),表示BITMAPINFOHEADER結(jié)構(gòu)體的長度,最常見的長度是40字節(jié),UltraEdit中可以看到緊接著的4個字節(jié)等于0×00000028=40字節(jié)。

BITMAPINFOHEADER的第2個屬性是biWidth(4字節(jié)),表示bmp圖片的寬度,這里等于0×00000030=48像素。

BITMAPINFOHEADER的第3個屬性是biHeight(4字節(jié)),表示bmp圖片的高度,這里等于0×00000030=48像素。

BITMAPINFOHEADER的第4個屬性是biPlanes(2字節(jié)),表示bmp圖片的平面屬,顯然顯示器只有一個平面,所以恒等于1,這里等于0×0001。

BITMAPINFOHEADER的第5個屬性是biBitCount(2字節(jié)),表示bmp圖片的顏色位數(shù),即24位圖、32位圖等等。這里等于0×0004,表示該圖片為4位圖。

BITMAPINFOHEADER的第6個屬性是biCompression(4字節(jié)),表示圖片的壓縮屬性,bmp圖片是不壓縮的,等于0,所以這里為0×00000000。

BITMAPINFOHEADER的第7個屬性是biSizeImage(4字節(jié)),表示bmp圖片數(shù)據(jù)區(qū)的大小,當上一個熟悉biCompression等于0時,這里的值可以省略不填,所以這里等于0×00000000。

BITMAPINFOHEADER的第8個屬性是biXPelsPerMeter(4字節(jié)),表示圖片X軸每米多少像素,可省略,這里等于0x00000EC3=3779像素/米。

BITMAPINFOHEADER的第9個屬性是biYPelsPerMeter(4字節(jié)),表示圖片Y軸每米多少像素,可省略,這里等于0x00000EC3=3779像素/米。

BITMAPINFOHEADER的第10個屬性是biClrUsed(4字節(jié)),表示使用了多少個顏色索引表,一般biBitCount屬性小于16才會用到,等于0時表示有2^biBitCount(frombyte.com)個顏色索引表,所以這里仍等于0×00000000。

BITMAPINFOHEADER的第11個屬性是biClrImportant(4字節(jié)),表示有多少個重要的顏色,等于0時表示所有顏色都很重要,所以這里等于0×00000000。

  至此BITMAPINFOHEADER結(jié)構(gòu)體結(jié)束。

  由于這個圖片到這里還未到達DIB數(shù)據(jù)區(qū)的偏移量,所以接下來的部分是RGBQUAD結(jié)構(gòu)體。RGBQUAD結(jié)構(gòu)體由4個字節(jié)型數(shù)據(jù)組成,所以一 個RGBQUAD結(jié)構(gòu)體只占用4字節(jié)空間,從左到右每個字節(jié)依次表示(藍色,綠色,紅色,未使用)。舉例的這個圖片我數(shù)了數(shù)總共有16個RGBQUAD結(jié) 構(gòu)體,由于該圖片是4位圖,2^4正好等于16,所以它把16種顏色全部都枚舉出來了,這些顏色就是一個顏色索引表。顏色索引表編號從0開始,總共16個 顏色,所以編號為0-15。從winhex中可以看到按照順序,這16個RGBQUAD結(jié)構(gòu)體依次為:

編號:(藍,綠,紅,空)

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,F(xiàn)F,00)

10號:(00,F(xiàn)F,00,00)

11號:(00,F(xiàn)F,F(xiàn)F,00)

12號:(FF,00,00,00)

13號:(FF,00,F(xiàn)F,00)

14號:(FF,F(xiàn)F,00,00)

15號:(FF,F(xiàn)F,F(xiàn)F,00)

  為了更直觀的表示這些顏色,可以見后面的圖片。

  到這里,正好滿足DIB數(shù)據(jù)區(qū)的偏移量,所以后面的字節(jié)就是圖片內(nèi)容了。這里需要提醒的是所有的DIB數(shù)據(jù)掃描行是上下顛倒的,也就是說一幅圖片先繪制底部的像素,再繪制頂部的像素,所以這些DIB數(shù)據(jù)所表示的像素點就是從圖片的左下角開始,一直表示到圖片的右上角。

  由于這里的圖片是4位圖片,也就是說4bit就表示一個像素,一個字節(jié)有8個bit,所以一個字節(jié)能表示2個像素。

  從winhex中可以看到,DIB數(shù)據(jù)區(qū)第一個字節(jié)是0×44,16進制正好是將2進制數(shù)每4個一組書寫的,跟4bit圖片正好吻 合,所以0×44表示兩個像素,高位的4表示第一個像素,低位的4表示第二個像素。這里的4不是表示RGB顏色,而是表示顏色索引號為4,由于索 引號從0開始編號的,所以4表示索引表中第5個顏色,從附圖中可以看到索引號為4的是藍色。這是第一字節(jié),表示的是圖片左下角開始2個像素,如果有 PhotoShop打開這個圖片可以看到,左下角2個像素取出來的顏色RGB值正好等于索引表中第5個顏色的RGB值。后面的DIB數(shù)據(jù)以此類推。

  至此一個bmp圖片就全部解析完了,根據(jù)這些信息就可以完整的繪制一張bmp圖片來。當然也可以簡單手工修復一個破壞不算嚴重的BMP文件!

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

新聞標題:北亞工程師詳細解說BMP文件格式-創(chuàng)新互聯(lián)
文章鏈接:http://jinyejixie.com/article42/isiec.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)、外貿(mào)建站、品牌網(wǎng)站設(shè)計、App開發(fā)、網(wǎng)站維護自適應網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站制作
新建县| 措勤县| 宜黄县| 温宿县| 托克逊县| 潢川县| 巴青县| 和龙市| 永昌县| 康马县| 深水埗区| 呼玛县| 于都县| 周宁县| 濉溪县| 临安市| 大安市| 深水埗区| 罗城| 波密县| 恩施市| 太仓市| 云林县| 勐海县| 宜春市| 安康市| 金湖县| 百色市| 涞水县| 安陆市| 丰台区| 华安县| 五华县| 岳普湖县| 宿迁市| 乐业县| 普格县| 乌拉特中旗| 定襄县| 鱼台县| 柳江县|