最近在做視頻資料擷取,要求將採集到的資料儲存成bmp的格式,現在把有關BMP的知識貼出來,供大家學習
BMP 是 DOS 和 Windows 相容電腦上的標準 Windows 映像格式。BMP 格式支援 RGB、索引顏色、灰階和位元影像顏色模式。可以為映像指定 Windows 或 OS/2? 格式和位元深度。對於使用 Windows 格式的 4 位和 8 位元影像像,還可以指定 RLE 壓縮。
BMP 映像通常是自下而上編寫出;但您也可以選擇“翻轉行序”選項,自上而下編寫。您還可以點按“進階模式”選擇其他編碼方法。(“翻轉行序”和“進階模式”對於遊戲程式員和其他使用 DirectX 的人員而言最有用。)
Windows bitmap,位元影像檔案。這是電腦上最常用的檔案格式,在Windows的目錄裡可以找到一大堆,大部分是Windows的案頭和壁紙圖案。基本上所有軟體都支援它,常見的BMP圖形是沒有壓縮的,所以畫面品質好,但是比較大。BMP有黑白、灰階、256色彩色和真彩色等多種,色彩數越多,檔案越大,映像越逼真。由於不壓縮的BMP圖形是逐點記錄畫面資訊的,所以它的檔案尺寸與像素和色彩數成固定關係,如一幅真彩色的352x288的無壓縮的BMP圖形,不管內容是什麼,那怕是空白的,它的檔案大小永遠304182位元組。
BMP是BitMap的縮寫(呵呵,這個想必人人都知道,屬於廢話,可以略過)。BitMap格式檔案最早是在MS-Windows3.0以上版本的視窗作業系統環境下使用的與裝置無關(DIB)的點陣位元影像檔案格式,也就是說Windows可以在任何裝置上顯示BitMap檔案。隨著Windows影響的擴大及其版本的日臻完善,使Windows已經成為PC作業系統的工業標準。現在各種版本的Windows環境中啟動並執行圖形、圖象檔案處理工具都支援BitMap格式檔案。它的主要特點有:檔案結構與PCX檔案類似,每個檔案只能存放一幅圖象;圖象資料是否採用壓縮方式可由使用者根據需要進行選擇。
每個BMP檔案中都包含三個部分:
1.點陣位元影像檔案頭(BitMapFileHeader):它裡麵包含有裝置無關的點陣位元影像檔案的類
型、尺寸、顯示內容等資訊。
BMP檔案頭BitMapFileHeader可以用如下結構來描述:
Typedef struct
{
int bfType;
long bfSize;
int bfReserved1;
int bfReserved2;
long bfOffbits;
}BitMapFileHeader;
此結構中各欄位含義如下:
·bfType 規定的位元影像檔案類型,必須是“BM”作為識別的BMP檔案的標
志。
·bfSize 位元影像檔案的大小,以位元組為單位。
·bfRserved1 位元影像檔案保留字,必須置為0。
·bfRserved2 位元影像檔案保留字,必須置為0。
·bfOffbits 給出位元影像陣列,即實際點位元影像相對於BitMapFileHeader的位移
量,以位元組為單位。
2.(1)點陣位元影像資訊頭(BitMapInfoHeader)資料結構:它含有關於Windows3.0及其更高版本與裝置無關點陣位元影像的尺寸和格式資訊,包括圖象的寬度、高度及壓縮方法等。
其結構如下:
typedef struct
{
long biSize;
long biWidth;
long biHeight;
int biPlanes;
int biBitCount;
long biComprission;
long biSizeImage;
long biXPelsPerMeter;
long biYPelsPerMeter;
long biClrUsed;
long biClrImportant;
}BitMapInfoHeader;
結構中各欄位含義如下:
·biSize BitMapInfoHeader結構所需要的位元組數。
·biWidth 位元影像的寬度(以象素為單位)。
·biHeight 位元影像的高度(以象素為單位)。
·biPlanes 輸出裝置的位平面數且必須置1。
·biBitCount 每個象素所需的位元;必須是1(單色)、4(16色)8(256
色)或24(真彩色)之一。
·biCompression 點陣位元影像規定的壓縮類型;必須是0(不壓縮)、1(BI_RLE8
壓縮類型)或2(BI_RLE4壓縮類型)之一。
·biSizeImage 位元影像資料位元組數。
·biXPeIsPerMeter 位元影像的目標裝置水平解析度,以每米象素數為單位。
·biYPeIsPerMeter 位元影像的目標裝置垂直解析度,以每米象素數為單位。
·biClrUsed 調色盤中圖象實際使用的顏色數。
·biClrImportant 位元影像顯示過程中被認為重要的色彩索引值。
(2)顏色表(RGBQUAD):用於說明位元影像中的顏色。它有若干個表項,每一表項是一個RGBQUAD類型的結構,定義一種顏色。
其結構如下:
typedef struct
{
unsigned char rgbBlue;
unsigned char rgbGreen;
unsigned char rgbRed;
unsigned char rgbReserved;
}RGBQUAD;
在由RGBQUAD定義的顏色中,藍色的亮度由rgbBlue來定,綠色的亮度由rgbGreen來定,紅色的亮度由rgbRed來定。RgbReserved為保留字,必須置0。
當biBitCount=1、4、8時,顏色表中分別有2、16、256個表項。
當biBitCount=24時,顏色表中表項為空白。位元影像陣列的每3個位元組代表一個象素,3個位元組直接定義了象素顏色中的藍、綠、紅的相對亮度,因此省去了顏色表中的顏色表項。
3.位元影像陣列。
按從左下到右上的方向儲存象素的灰階值。它有壓縮和非壓縮兩種儲存格式。