bmp檔案是一種畫素檔案,它儲存了一幅圖象中所有的畫素。這種檔案格式可以儲存單色位圖、16色或256色索引模式畫素圖、24位真彩色圖象,每種模式種單一畫素的大小分別為1/8位元組,1/2位元組,1位元組和3位元組。目前最常見的是256色bmp和24位色bmp。這種檔案格式還定義了畫素儲存的幾種方法,包括不壓縮、rle壓縮等。常見的bmp檔案大多是不壓縮的。
windows所使用的bmp檔案,在開始處有乙個檔案頭,大小為54位元組。儲存了包括檔案格式標識、顏色數、圖象大小、壓縮方式等資訊,因為我們僅討論24位色不壓縮的bmp,所以檔案頭中的資訊基本不需要注意,只有「大小」這一項對我們比較有用。圖象的寬度和高度都是乙個32位整數,在檔案中的位址分別為0x0012和0x0016。54個位元組以後,如果是16色或256色bmp,則還有乙個顏色表,但24位色bmp沒有這個,我們這裡不考慮。接下來就是實際的畫素資料了。24位色的bmp檔案中,每三個位元組表示乙個畫素的顏色。注意,通常使用rgb來表示顏色,但bmp檔案則採用bgr,就是說,順序被反過來了。
1. bmp檔案組成
bmp檔案由檔案頭、位圖資訊頭、顏色資訊和圖形資料四部分組成。
2. bmp檔案頭
bmp檔案頭資料結構含有bmp檔案的型別、檔案大小和點陣圖起始位置等資訊。
其結構定義如下:
typedef struct tagbitmapfileheader
bitmapfileheader;
3. 位圖資訊頭
bmp點陣圖資訊頭資料用於說明點陣圖的尺寸等資訊。
typedef struct tagbitmapinfoheader bitmapinfoheader;
4. 顏色表
顏色表用於說明點陣圖中的顏色,它有若干個表項,每乙個表項是乙個rgbquad型別的結構,定義一種顏色。
rgbquad結構的定義如下:
typedef struct tagrgbquad rgbquad;
顏色表中rgbquad結構資料的個數有bibitcount來確定:
當bibitcount=1,4,8時,分別有2,16,256個表項;
當bibitcount=24時,沒有顏色表項。
位圖資訊頭和顏色表組成位圖資訊,bitmapinfo結構定義如下:
typedef struct tagbitmapinfo bitmapinfo;
5. 位圖資料
位圖資料記錄了點陣圖的每乙個畫素值,記錄順序是在掃瞄行內是從左到右,掃瞄行之間是從下到上。點陣圖的乙個畫素值所佔的位元組數:
當bibitcount=1時,8個畫素佔1個位元組;
當bibitcount=4時,2個畫素佔1個位元組;
當bibitcount=8時,1個畫素佔1個位元組;
當bibitcount=24時,1個畫素佔3個位元組;
windows規定乙個掃瞄行所佔的位元組數必須是
4的倍數(即以long為單位),不足的以0填充,
乙個掃瞄行所佔的位元組數計算方法:
datasizeperline= (biwidth* bibitcount+31)/8;
// 乙個掃瞄行所佔的位元組數
datasizeperline= datasizeperline/4*4; // 位元組數必須是4的倍數
位圖資料的大小(不壓縮情況下):
datasize= datasizeperline* biheight;
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 點陣圖的高度,以象素為單位...