資源描述:
《vc中保存bmp位圖文件的方法及bmp文件格式帶源碼實(shí)現(xiàn)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。
1、#include"stdio.h"#include"Windows.h"http://幾個(gè)全局變量,存放讀入圖像的位圖數(shù)據(jù)、寬、高、顏色表及每像素所占位數(shù)(比特)//此處定義全局變量主要為了后面的圖像數(shù)據(jù)訪問及圖像存儲(chǔ)作準(zhǔn)備unsignedchar*pBmpBuf;//讀入圖像數(shù)據(jù)的指針intbmpWidth;//圖像的寬intbmpHeight;//圖像的高RGBQUAD*pColorTable;//顏色表指針intbiBitCount;//圖像類型boolreadBmp(char*bmpName){?//二進(jìn)制讀方式打開指定的圖像文件???FI
2、LE*fp=fopen(bmpName,"rb");?if(fp==0)return0;???//跳過位圖文件頭結(jié)構(gòu)BITMAPFILEHEADER?fseek(fp,sizeof(BITMAPFILEHEADER),0);???//定義位圖信息頭結(jié)構(gòu)變量,讀取位圖信息頭進(jìn)內(nèi)存,存放在變量head中?BITMAPINFOHEADERhead;?fread(&head,sizeof(BITMAPINFOHEADER),1,fp);??//獲取圖像寬、高、每像素所占位數(shù)等信息?bmpWidth=head.biWidth;?bmpHeight=
3、head.biHeight;?biBitCount=head.biBitCount;??//定義變量,計(jì)算圖像每行像素所占的字節(jié)數(shù)(必須是4的倍數(shù))?intlineByte=(bmpWidth*biBitCount/8+3)/4*4;??//灰度圖像有顏色表,且顏色表表項(xiàng)為256?if(biBitCount==8){?//申請(qǐng)顏色表所需要的空間,讀顏色表進(jìn)內(nèi)存?pColorTable=newRGBQUAD[256];?fread(pColorTable,sizeof(RGBQUAD),256,fp);?}??//申請(qǐng)位圖數(shù)據(jù)所需要的空間,
4、讀位圖數(shù)據(jù)進(jìn)內(nèi)存?pBmpBuf=newunsignedchar[lineByte*bmpHeight];?fread(pBmpBuf,1,lineByte*bmpHeight,fp);??//關(guān)閉文件?fclose(fp);??return1;}boolsaveBmp(char*bmpName,unsignedchar*imgBuf,intwidth,intheight,???intbiBitCount,RGBQUAD*pColorTable){?//如果位圖數(shù)據(jù)指針為0,則沒有數(shù)據(jù)傳入,函數(shù)返回?if(!imgBuf)?return0
5、;??//顏色表大小,以字節(jié)為單位,灰度圖像顏色表為1024字節(jié),彩色圖像顏色表大小為0?intcolorTablesize=0;?if(biBitCount==8)?colorTablesize=1024;?//待存儲(chǔ)圖像數(shù)據(jù)每行字節(jié)數(shù)為4的倍數(shù)?intlineByte=(width*biBitCount/8+3)/4*4;??//以二進(jìn)制寫的方式打開文件?FILE*fp=fopen(bmpName,"wb");?if(fp==0)return0;??//申請(qǐng)位圖文件頭結(jié)構(gòu)變量,填寫文件頭信息?BITMAPFILEHEADERfileH
6、ead;?fileHead.bfType=0x4D42;//bmp類型??//bfSize是圖像文件4個(gè)組成部分之和?fileHead.bfSize=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)?+colorTablesize+lineByte*height;?fileHead.bfReserved1=0;?fileHead.bfReserved2=0;??//bfOffBits是圖像文件前三個(gè)部分所需空間之和?fileHead.bfOffBits=54+colorTablesize;
7、??//寫文件頭進(jìn)文件?fwrite(&fileHead,sizeof(BITMAPFILEHEADER),1,fp);??//申請(qǐng)位圖信息頭結(jié)構(gòu)變量,填寫信息頭信息?BITMAPINFOHEADERhead;?head.biBitCount=biBitCount;?head.biClrImportant=0;?head.biClrUsed=0;?head.biCompression=0;?head.biHeight=height;?head.biPlanes=1;?head.biSize=40;?head.biSizeImage=lin
8、eByte*height;?head.biWidth=width;?head.biXPelsPerMeter=0;?head.biYPelsPerMeter=0;?//寫位圖信息頭進(jìn)內(nèi)存?fw