bmp檔案格式由位**件頭、位圖資訊和畫素資料三個部分組成。位圖資訊又由位圖資訊頭和調色盤資料組成。
在bmp格式中,位**件頭、位圖資訊頭為固定長度,分別為14、40位元組。調色盤資料的多少與所用的色彩數有關,它的位元組數是色彩數的四倍,每個調色盤單元的前三個位元組分別表示彩色的藍、綠、紅分量(注意不是常見的rgb,而是bgr),第四個位元組備用。畫素資料在檔案的最後。
在windows中,讀入內在的是去掉了14位元組位圖標頭檔案後的bmp檔案,即裝置無關位圖(dib)。
位**件頭結構
資料型別
識別符號內容
char
bftype[2]
ascii字元'bm'
dword
bfsize
檔案大小(以4位元組為單位)
word
bfreserve1
備用單元1
word
bfreserve2
備用單元2
dword
bfoffbits
影象開始處的位元組偏移
位圖資訊頭結構
資料型別
識別符號內容
dword
bisize
資訊頭大小,40位元組
dword
biwidth
影象寬度,以畫素為單位
dword
biheight
影象高度,以畫素為單位
word
biplanes
位平面數,總為1
word
bibitcount
每畫素位數,為1、4、8或24
dword
bicompression
壓縮型別,0為不壓縮
dword
bisizeimage
壓縮影象大小的位元組數
dword
bixpelspermeter
水平解析度
dword
biypelspermeter
垂直解析度
dword
biclrused
使用的色彩數
dword
biclrimportant
重要色彩數
調色盤資料
在位**件頭與點陣圖資訊頭之後的是調色盤資料。調色盤資料是從第54位元組開始存放,它的數量由影象的型別決定。
畫素資料
畫素資料跟在調色盤資料之後,儲存位置可以由位**件頭得到,要注意以下幾點:
1、bmp格式每行位元組數應為4的倍數
可以由下面公式計算每行的位元組數:((bits)+31)/32*4,這裡的bits是每一行佔的位數(很巧妙吧,這個演算法)
//也就是向上取整的演算法,就相當於31/32得乙個非常接近1的數,這樣如果有餘數就相當於加1.
2、畫素資料是自下而上存放的,也就是從影象的最後一行開始存入檔案的,從左到右的。
3、16位彩色影象採用單一位平面。
4、畫素資料存放順序為藍、綠、紅。
檔案的讀取與顯示
在windows系統中,存入記憶體的影象資料採用的是bmp格式,也即在windows應用程式中,將讀入記憶體,實際上就是將資料轉換成bmp格式的點陣圖。
下面是讀取和顯示bmp的**:(不是自己寫的)
int wid,hei,bits;
hbitmap hbitmap = null;
lpstr lpbits;
// 讀取
void loadbmp(lpstr lpstrfilename)
// 顯示
void displaydibsection(hwnd hwnd, hbitmap hbitmap, int wid, int hei)
上面的這個顯示程式體現了雙緩衝顯示的技術。先在記憶體裝置描述表中畫好圖,再利用影象塊操作函式bitblt將影象從記憶體裝置描述表中拷貝到「顯示器」上。
Oracle 控制檔案格式ctl檔案格式
options skip 1,errors 10 load data characterset zhs16gbk infile into table table name truncate fields terminated by optionally enclosed by trailing nu...
檔案格式 gff格式
gff檔案格式 gff格式是 sanger 研究所定義,是一種簡單的 方便的對於 dna rna以及蛋白質序列的特徵進行描述的一種資料格式,已經成為序列注釋的通用格式,比如基因組的基因 許多軟體都支援輸入或者輸出gff格式。前格式定義的最新版本是版本3。原始定義見 song websitegff是存...
DOS檔案格式 與 UNIX檔案格式 轉換
這裡闡述兩種方法 1.使用vim的方法 在vim下 使用如下命令 set fileformat unix 就可轉換成 unix 檔案格式,也可使用其縮寫形式命令 set ff unix 直接輸入命令 set fileformat 或 set ff 還可查詢當前的命令格式。2.使用linux命令工具 ...