BMP檔案解析

2022-09-03 19:42:09 字數 2216 閱讀 8955

目錄c語言**

乙個問題

完整程式

bmp(全稱bitmap)是windows作業系統中的標準影象檔案格式,可以分成兩類:裝置有向量相關位圖(ddb)和裝置無向量相關位圖(dib),使用非常廣。它採用位對映儲存格式,除了影象深度可選以外,不採用其他任何壓縮,因此,bmp檔案所占用的空間很大。bmp檔案的影象深度可選lbit、4bit、8bit及24bit。bmp檔案儲存資料時,影象的掃瞄方式是按從左到右、從下到上的順序。由於bmp檔案格式是windows環境中交換與圖有關的資料的一種標準,因此在windows環境中執行的圖形影象軟體都支援bmp影象格式。

bmp檔案主要有四部分組成,點陣圖頭、位圖資訊、調色盤、位圖資料。

儲存檔案的總體資訊

這部分告訴應用程式影象的詳細資訊,在螢幕上顯示影象將會使用這些資訊

暫時不做介紹

在典型的24位位圖下,乙個畫素由24bit,即3個位元組(r\g\b)組成。

int getbmpfilesize(file * fpbmp)

int getbmpwidth(file* fpbmp)

int getbmpheight( file* fpbmp )

int getoffset(file * fpbmp)

對於乙個3*3的bmp檔案,三行分別是純色的rgb分量

等等,頭部54位元組,影象9個畫素=27位元組,加起來一共81位元組,可是檔案有90位元組啊!剩下的4個位元組呢?

不妨把注釋部分取消注釋試一下!

原來,windows裡每行不足4位元組的整數倍,會自動補0!所以三行多出了3個畫素=9位元組

#include int getbmpwidth(file* fpbmp);

int getbmpheight( file* fpbmp );

int getbmpfilesize(file * fpbmp);

int getbmppixbits(file * fpbmp);

int getoffset(file * fpbmp);

int readbmpdata( file* fpbmp );

int main()

printf("影象寬度:%d\n",getbmpwidth(fp_read));

printf("影象高度:%d\n",getbmpheight(fp_read));

printf("檔案大小:%d位元組\n",getbmpfilesize(fp_read));

printf("畫素位數:%d\n",getbmppixbits(fp_read));

printf("偏移:%d\n",getoffset(fp_read));

readbmpdata(fp_read);

return 0;

}int readbmpdata( file* fpbmp )

printf(",");

for(;(j)%4!=0;j++)

printf("\n");

}return 0;

}//獲取畫素位數

int getbmppixbits(file * fpbmp)

int getbmpfilesize(file * fpbmp)

int getbmpwidth(file* fpbmp)

int getbmpheight( file* fpbmp )

int getoffset(file * fpbmp)

bmp檔案解析

size xx large 解析bmp影象 size 今天做了乙個很好玩的東西 bmp解析器。剛看到的時候我覺得超難,完全不 懂,做出來之後,覺得其實很簡單!接下來就讓我來介紹一下吧!在真正做解析器之前我們應該先了解一些基礎知識!size x large 位運算 size size large 1....

BMP檔案結構解析

一 bmp檔案結構 bmp檔案組成 bmp檔案由檔案頭 位圖資訊頭 顏色資訊和圖形資料四部分組成。bmp檔案頭 bmp檔案頭資料結構含有bmp檔案的型別 檔案大小和點陣圖起始位置等資訊。其結構定義如下 typedef struct tagbitmapfileheader bitmapfilehead...

解析 bmp檔案的結構

bmp檔案組成 bmp檔案由檔案頭 位圖資訊頭 顏色資訊和圖形資料四部分組成 bmp檔案頭 bmp檔案頭資料結構含有bmp檔案的型別 檔案大小和點陣圖起始位置其結構定義如下 typedef struct tagbitmapfileheader bitmapfileheader 位圖資訊頭 bmp點陣...