Bmp檔案格式解析

2021-09-29 07:43:42 字數 4121 閱讀 5299

1. bmp檔案組成。

bmp檔案由檔案頭、位圖資訊頭、顏色資訊和圖形資料四部分組成。檔案頭主要包含檔案的大小、檔案型別、影象資料偏離檔案頭的長度等資訊;位圖資訊頭包含圖象的尺寸資訊、影象用幾個位元數值來表示乙個畫素、影象是否壓縮、影象所用的顏色數等資訊。顏色資訊包含影象所用到的顏色表,顯示影象時需用到這個顏色表來生成調色盤,但如果影象為真彩色,既影象的每個畫素用24個位元來表示,檔案中就沒有這一塊資訊,也就不需要操作調色盤。檔案中的資料塊表示影象的相應的畫素值,需要注意的是:影象的畫素值在檔案中的存放順序為從左到右,從下到上,也就是說,在bmp檔案中首先存放的是影象的最後一行畫素,最後才儲存影象的第一行畫素,但對與同一行的畫素,則是按照先左邊後右邊的的順序儲存的;另外乙個需要讀者朋友關注的細節是:檔案儲存影象的每一行畫素值時,如果儲存該行畫素值所佔的位元組數為4的倍數,則正常儲存,否則,需要在後端補0,湊足4的倍數。

2. bmp檔案頭

bmp檔案頭資料結構含有bmp檔案的型別、檔案大小和點陣圖起始位置等資訊。其結構定義如下:

typedef struct tagbitmapfileheader

bitmapfileheader;該結構佔據14個位元組。

3. 位圖資訊頭

bmp點陣圖資訊頭資料用於說明點陣圖的尺寸等資訊。其結構如下:

typedef struct tagbitmapinfoheader bitmapinfoheader;該結構佔據40個位元組。

注意:對於bmp檔案格式,在處理單色影象和真彩色影象的時候,無論圖象資料多麼龐大,都不對圖象資料進行任何壓縮處理,一般情況下,如果位圖採用壓縮格式,那麼16色影象採用rle4壓縮演算法,256色影象採用rle8壓縮演算法。

第一節 影象的檔案格式

要利用計算機對數位化影象進行處理,首先要對影象的檔案格式要有清楚的認識,因為我們前面說過,自然界的影象以模擬訊號的形式存在,在用計算機進行處理以前,首先要數位化,比如攝像頭(ccd)攝取的訊號在送往計算機處理前,一般情況下要經過數模轉換,這個任務常常由影象採集卡完成,它的輸出一般為裸圖的形式;如果使用者想要生成目標影象檔案,必須根據檔案的格式做相應的處理。隨著科技的發展,數碼像機、數碼攝像機已經進入尋常百姓家,我們可以利用這些裝置作為影象處理系統的輸入裝置來為後續的影象處理提供資訊源。無論是什麼裝置,它總是提供按一定的影象檔案格式來提供資訊,比較常用的有bmp格式、jpeg格式、gif格式等等,所以我們在進行影象處理以前,首先要對影象的格式要有清晰的認識,只有在此基礎上才可以進行進一步的開發處理。

在講述影象檔案格式前,先對影象作乙個簡單的分類。除了最簡單的影象外,所有的影象都有顏色,而單色影象則是帶有顏色的影象中比較簡單的格式,它一般由黑色區域和白色區域組成,可以用乙個位元表示乙個畫素,「1」表示黑色,「0」表示白色,當然也可以倒過來表示,這種影象稱之為二值影象。我們也可以用8個位元(乙個位元組)表示乙個畫素,相當於把黑和白等分為256個級別,「0」表示為黑,「255」表示為白,該位元組的數值表示相應畫素值的灰度值或亮度值,數值越接近「0」,對應畫素點越黑,相反,則對應畫素點越白,此種影象我們一般稱之為灰度影象。單色影象和灰度影象又統稱為黑白影象,與之對應存在著彩色影象,這種影象要複雜一些,表示影象時,常用的影象彩色模式有rgb模式、cmyk模式和his模式,一般情況下我們只使用rgb模式,r對應紅色,g對應綠色,b對應藍色,它們統稱為三基色,這三中色彩的不同搭配,就可以搭配成各種現實中的色彩,此時彩色影象的每乙個畫素都需要3個樣本組成的一組資料表示,其中每個樣本用於表示該畫素的乙個基本顏色。

對於現存的所有的影象檔案格式,我們在這裡主要介紹bmp影象檔案格式,並且檔案裡的影象資料是未壓縮的,因為影象的數位化處理主要是對影象中的各個畫素進行相應的處理,而未壓縮的bmp影象中的畫素數值正好與實際要處理的數字影象相對應,這種格式的檔案最合適我們對之進行數位化處理。請讀者記住,壓縮過的影象是無法直接進行數位化處理的,如jpeg、gif等格式的檔案,此時首先要對影象檔案解壓縮,這就要涉及到一些比較複雜的壓縮演算法。後續章節中我們將針對特殊的檔案格式如何轉換為bmp格式的檔案問題作專門的論述,經過轉換,我們就可以利用得到的未壓縮的bmp檔案格式進行後續處理。對於jpeg、gif等格式,由於涉及到壓縮演算法,這要求讀者掌握一定的資訊理論方面的知識,如果展開的話,可以寫一本書,限於篇幅原因,我們只作一般性的講解,有興趣的朋友可以參考相關書籍資料。

一、bmp檔案結構

1. bmp檔案組成

bmp檔案由檔案頭、位圖資訊頭、顏色資訊和圖形資料四部分組成。檔案頭主要包含檔案的大小、檔案型別、影象資料偏離檔案頭的長度等資訊;位圖資訊頭包含圖象的尺寸資訊、影象用幾個位元數值來表示乙個畫素、影象是否壓縮、影象所用的顏色數等資訊。顏色資訊包含影象所用到的顏色表,顯示影象時需用到這個顏色表來生成調色盤,但如果影象為真彩色,既影象的每個畫素用24個位元來表示,檔案中就沒有這一塊資訊,也就不需要操作調色盤。檔案中的資料塊表示影象的相應的畫素值,需要注意的是:影象的畫素值在檔案中的存放順序為從左到右,從下到上,也就是說,在bmp檔案中首先存放的是影象的最後一行畫素,最後才儲存影象的第一行畫素,但對與同一行的畫素,則是按照先左邊後右邊的的順序儲存的;另外乙個需要讀者朋友關注的細節是:檔案儲存影象的每一行畫素值時,如果儲存該行畫素值所佔的位元組數為4的倍數,則正常儲存,否則,需要在後端補0,湊足4的倍數。

2. bmp檔案頭

bmp檔案頭資料結構含有bmp檔案的型別、檔案大小和點陣圖起始位置等資訊。其結構定義如下:

typedef struct tagbitmapfileheader

bitmapfileheader;該結構佔據14個位元組。

3. 位圖資訊頭

bmp點陣圖資訊頭資料用於說明點陣圖的尺寸等資訊。其結構如下:

typedef struct tagbitmapinfoheader bitmapinfoheader;該結構佔據40個位元組。

注意:對於bmp檔案格式,在處理單色影象和真彩色影象的時候,無論圖象資料多麼龐大,都不對圖象資料進行任何壓縮處理,一般情況下,如果位圖採用壓縮格式,那麼16色影象採用rle4壓縮演算法,256色影象採用rle8壓縮演算法。

4. 顏色表

顏色表用於說明點陣圖中的顏色,它有若干個表項,每乙個表項是乙個rgbquad型別的結構,定義一種顏色。rgbquad結構的定義如下:

typedef struct tagrgbquad rgbquad;

顏色表中rgbquad結構資料的個數由bitmapinfoheader 中的bibitcount項來確定,當bibitcount=1,4,8時,分別有2,16,256個顏色表項,當bibitcount=24時,影象為真彩色,影象中每個畫素的顏色用三個位元組表示,分別對應r、g、b值,影象檔案沒有顏色表項。位圖資訊頭和顏色表組成位圖資訊,bitmapinfo結構定義如下:

typedef struct tagbitmapinfo bitmapinfo;

注意:rgbquad資料結構中,增加了乙個保留字段rgbreserved,它不代表任何顏色,必須取固定的值為「0」,同時,rgbquad結構中定義的顏色值中,紅色、綠色和藍色的排列順序與一般真彩色影象檔案的顏色資料排列順序恰好相反,既:若某個點陣圖中的乙個畫素點的顏色的描述為「00,00,ff,00」,則表示該點為紅色,而不是藍色。

5. 位圖資料

位圖資料記錄了點陣圖的每乙個畫素值或該對應畫素的顏色表的索引值,影象記錄順序是在掃瞄行內是從左到右,掃瞄行之間是從下到上。這種格式我們又稱為bottom_up點陣圖,當然與之相對的還有up_down形式的點陣圖,它的記錄順序是從上到下的,對於這種形式的點陣圖,也不存在壓縮形式。點陣圖的乙個畫素值所佔的位元組數:當bibitcount=1時,8個畫素佔1個位元組;當bibitcount=4時,2個畫素佔1個位元組;當bibitcount=8時,1個畫素佔1個位元組;當bibitcount=24時,1個畫素佔3個位元組,此時影象為真彩色影象。當影象不是為真彩色時,影象檔案中包含顏色表,點陣圖的資料表示對應畫素點在顏色表中相應的索引值,當為真彩色時,每乙個畫素用三個位元組表示影象相應畫素點彩色值,每個位元組分別對應r、g、b分量的值,這時候影象檔案中沒有顏色表。上面我已經講過了,windows規定影象檔案中乙個掃瞄行所佔的位元組數必須是4的倍數(即以字為單位),不足的以0填充,影象檔案中乙個掃瞄行所佔的位元組數計算方法:

datasizeperline= (biwidth* bibitcount+31)/8;// 乙個掃瞄行所佔的位元組數

位圖資料的大小按下式計算(不壓縮情況下):

datasize= datasizeperline* biheight。

上述是bmp檔案格式的說明,搞清楚了以上的結構,就可以正確的操作影象檔案,對它進行讀或寫操作了。

BMP檔案格式

bmp檔案格式 bmp檔案大體上分成四個部分,如圖1所示。位 件頭bitmapfileheader 位圖資訊頭bitmapinfoheader 調色盤 palette 圖象資料 圖1.windows位 件結構示意圖 第一部分為位 件頭bitmapfileheader,是乙個結構,其定義如下 type...

BMP檔案格式

典型的位 件格式通常包含下面幾個資料塊 下面的部分將會詳細地描述位 件中儲存的資料。需要注意的是這是標準點陣圖的檔案格式,其他一些位圖影象可能根據生成檔案的應用程式不同所使用格式可能會有細微的區別。這部分是識別資訊,典型的應用程式會首先普通讀取這部分資料以確保的確是位 件並且沒有損壞。這部分告訴應用...

BMP檔案格式

位置 大小 說明 0000h 2 bm 檔案標識 0002h 4 檔案大小 0006h 4 保留 0 000ah 4 從檔案開始到位圖資料之間的偏移量 000eh 4 位圖資訊頭,用來描述點陣圖的顏色 壓縮方法等。0012h 4 點陣圖的寬度,以象素為單位 0016h 4 點陣圖的高度,以象素為單位...