资源描述:
《用c++读取、修改和保存位图》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、用C++读取、修改和保存位图 该示例用C++读取、修改位图,通过它我们可以了解位图的文件结构,对图像处理的理解很有帮助。下面是全部的源码: #include#include#include/***********************变量的定义***********************************/unsignedchar*pBmpBuf; //读入图像数据的指针intbmpWidth; //图像的宽度intbmpHeight; //
2、图像的高度RGBQUAD*pColorTable; //颜色表指针intbiBitCount; //图像类型,像素位数/****************************************************************************读取图像的位图数据、宽度、高度、颜色表及像素位数,并存放在全局变量中*****************************************************************************/boolreadBmp(ch
3、ar*bmpName){ FILE*fp=fopen(bmpName,"rb"); //以二进制读的方式打开指定的图像文件 if(fp==0)return0; //跳过位图文件头 fseek(fp,sizeof(BITMAPFILEHEADER),0); //定义位图信息头结构变量,读取位图信息头进内存,存放在变量infoHead中 BITMAPINFOHEADERinfoHead; fread(&infoHead,sizeof(BITMAPINFOHEADER),1,fp); bmpWidth=infoH
4、ead.biWidth; bmpHeight=infoHead.biHeight; biBitCount=infoHead.biBitCount; //定义变量,计算图像每行像素所占的字节数(必须为4的倍数) intlineByte=(bmpWidth*biBitCount/8+3)/4*4; //灰度图像有颜色表,且颜色表为256 if(biBitCount==8) { //申请颜色表所需要的空间,读颜色表进内存 pColorTable=newRGBQUAD[256]; fread(pColorTable,size
5、of(RGBQUAD),256,fp); } //申请位图数据所需要的空间,读位图数据进内存 pBmpBuf=newunsignedchar[lineByte*bmpHeight]; fread(pBmpBuf,1,lineByte*bmpHeight,fp); fclose(fp); return1;}/***************************************************************************************************
6、 将指定数据写到文件中***************************************************************************************************/boolsaveBmp(char*bmpName,unsignedchar*imgBuf,intwidth,intheight, intbiBitCount,RGBQUAD*pColorTable){ //如果位图数据指针为0,则没有数据输入 if(!i
7、mgBuf) return0; //颜色表大小,以字节为单位:灰度图像为1024;彩色图像为0 intcolorTablesize=0; if(biBitCount==8) colorTablesize=1024; //待存储图像数据每行字节数为4的倍数 intlineByte=(width*biBitCount/8+3)/4*4; //以二进制写的方式打开文件 FILE*fp=fopen(bmpName,"wb"); if(fp==0)return0; //申请位图文件头结构变量,填写文件头信息 BITMAPFILE
8、HEADERfileHead; fileHead.bfType=0x4D42; //bmp类型 //bfSize是图像文件4个部分之和 fileHead.bfSize=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER) +colorTablesize