BMP檔案旋轉

2021-06-21 14:37:38 字數 1936 閱讀 6170

//一、要求將bmp檔案順時針旋轉90°,要求熟悉bmp的檔案格式及熟悉檔案操作

//解題思路如下:

檔案的組成此處不贅述,關鍵針對24位真彩圖

//檔案頭組成

class header //檔案頭

;/其中word等為自定義資料型別以配合文件說

typedef unsigned char byte; //byte為每個畫素的rgb類,數值在0~255

typedef unsigned int dword; //四個位元組

typedef unsigned short word; //兩個位元組

typedef long long; //四個位元組

資訊頭組成

class info //資訊頭

;這說明bmp高h,寬w,每個座標下(x,y)有乙個畫素,其中畫素有3個位元組,分別為rgb

讀寫檔案

int main(int argc,char* argv)

else

header fileheader;

info infoheader;

ifstream infile(src_name,ios::in|ios::binary);

if(!infile)

//首先將src.bmp的檔案頭和資訊頭讀入到記憶體的fileheader 和infoheader位置

//然後再進行旋轉操作函式

//旋轉函式的編寫

//首先要改變目標函式的檔案頭資料和資訊頭資料,這裡主要是檔案頭的bfsize即位**件的大小和資訊頭的biwidth \biheight\ bisizeimage

//其次要進行旋轉操作,即改變位圖旋轉90°後的資料儲存

//所以要先讀入位圖資料

//考慮到

//windows 規定影象檔案中乙個掃瞄行所佔的位元組數必須是 4 的倍數(即以字為單位),不足的以 0 填充,影象檔案中乙個掃瞄行所佔的位元組數計算方法:

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

//即對於原始檔案,其每行的後面是有補零的,所以讀取時應跳過這部分

//ps:為什麼每行讀取位元組公式是這樣計算的呢?這是因為windows 規定影象檔案中乙個掃瞄行所佔的位元組數必須是 4 的倍數(即以字為單位),即每個掃瞄行/讀取的位數必須為32的倍數,向上取整,不足補零,所以要加上32-1,則datasizeperline= (biwidth* bibitcount+31)/32*4;

//則要計算每個掃瞄行的補零的位元組數

//一種寫法:

int getdiff(info & info)

//另一種寫法

int getdiff(info & info)

//接下來便是旋轉函式

template < class t >

bool trans(ifstream & infile,ofstream & outfile,header & header,info & info)

;class info //資訊頭

;class rgb24

byte red; //紅色的亮度(值範圍在0~255)

byte green; //綠色的亮度(值範圍在0~255)

byte blue; //藍色的亮度(值範圍在0~255)

};/*找到每行需要補0的位元組數 */

int getdiff(info & info)

template < class t >

bool trans(ifstream & infile,ofstream & outfile,header & header,info & info)

BMP檔案結構

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

BMP檔案結構

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

BMP檔案結構

平常我們常見的 bmp檔案即位 件,又稱dib裝置無關位圖,是相對於系統記憶體中使用的ddb裝置相關位圖而言的.一 位 件頭 bitmapfileheader struct bftype word 檔案標識,必須是 bm bfsize dword 位 件大小,以位元組為單位 bfreserved1 ...