C语言实现BMP格式图片转化为灰度_第1页
C语言实现BMP格式图片转化为灰度_第2页
C语言实现BMP格式图片转化为灰度_第3页
C语言实现BMP格式图片转化为灰度_第4页
C语言实现BMP格式图片转化为灰度_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第C语言实现BMP格式图片转化为灰度FILE*fp1=fopen("C:\\Users\\Administrator\\Desktop\\data\\bmp\\image.bmp","rb+");

if(fp1==NULL)

printf("打开文件fp1失败");

exit(0);

FILE*fp2=fopen("C:\\Users\\Administrator\\Desktop\\data\\bmp\\imageGray.bmp","wb");

if(fp1==NULL)

printf("打开文件fp2失败");

exit(0);

fileHeader*fh;

fileInfo*fi;

fh=(fileHeader*)malloc(sizeof(fileHeader));

fi=(fileInfo*)malloc(sizeof(fileInfo));

//读取位图头结构和信息头

fread(fh,sizeof(fileHeader),1,fp1);

fread(fi,sizeof(fileInfo),1,fp1);

printf("\\\\\\\\\\\\\\\\\\\\原始图片信息\\\\\\\\\\\\\\\\\\\\\\\\\\\n");

printf("bmp文件头:\n");

printf("bfSize:%d\n",fh-bfSize);

printf("bfOffBits:%d\n",fh-bfOffBits);

printf("\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n");

printf("bmp信息头\n");

printf("结构体长度:%d\n",fi-biSize);

printf("位图宽度:%d\n",fi-biWidth);

printf("位图高度:%d\n",fi-biHeight);

printf("位图平面数:%d\n",fi-biPlanes);

printf("颜色位数:%d\n",fi-biBitCount);

printf("压缩方式:%d\n",fi-biCompression);

printf("实际位图数据占用的字节数:%d\n",fi-biSizeImage);

printf("X方向分辨率:%d\n",fi-biXPixPerMeter);

printf("Y方向分辨率:%d\n",fi-biYPixPerMeter);

printf("使用的颜色数:%d\n",fi-biClrUsed);

printf("重要颜色数:%d\n",fi-biClrImporant);

printf("\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n");

//修改信息头

fi-biBitCount=8;

//fi-biSizeImage=((fi-biWidth*3+3)/4)*4*fi-biHeight;

fi-biSizeImage=fi-biHeight*fi-biWidth;

//修改文件头

fh-bfOffBits=sizeof(fileHeader)+sizeof(fileInfo)+256*sizeof(rgbq);

fh-bfSize=fh-bfOffBits+fi-biSizeImage;

printf("\\\\\\\\\\\\\\\\\\\\修改后的图片信息\\\\\\\\\\\\\\\\\\\\\\\\\\\n");

printf("bmp文件头:\n");

printf("bfSize:%d\n",fh-bfSize);

printf("bfOffBits:%d\n",fh-bfOffBits);

printf("\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n");

printf("bmp信息头\n");

printf("结构体长度:%d\n",fi-biSize);

printf("位图宽度:%d\n",fi-biWidth);

printf("位图高度:%d\n",fi-biHeight);

printf("位图平面数:%d\n",fi-biPlanes);

printf("颜色位数:%d\n",fi-biBitCount);

printf("压缩方式:%d\n",fi-biCompression);

printf("实际位图数据占用的字节数:%d\n",fi-biSizeImage);

printf("X方向分辨率:%d\n",fi-biXPixPerMeter);

printf("Y方向分辨率:%d\n",fi-biYPixPerMeter);

printf("使用的颜色数:%d\n",fi-biClrUsed);

printf("重要颜色数:%d\n",fi-biClrImporant);

printf("\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n");

//创建调色板

inti,j,k=0;

rgbq*fq=(rgbq*)malloc(256*sizeof(rgbq));

for(i=0;ii++)

fq[i].rgbBlue=fq[i].rgbGreen=fq[i].rgbRed=i;

//写入文件头、信息头、调色板

fwrite(fh,sizeof(fileHeader),1,fp2);

fwrite(fi,sizeof(fileInfo),1,fp2);

fwrite(fq,sizeof(rgbq),256,fp2);

//将位图信息转为灰度

//存储bmp一行的像素点

//unsignedcharImgData[900][3];

unsignedcharImgData[3000][3];

//将灰度图像存到一维数组中

//unsignedchargrayData2[900];

unsignedcharImgData2[3000];

//错误的算法

for(i=0;ifi-biHeight;i++)

for(j=0;j(fi-biWidth*3+3)/4*4;j++)

for(k=0;kk++)

fread(ImgData[j][k],1,1,fp1);

for(j=0;j(fi-biWidth+3)/4*4;j++)

ImgData2[j]=int((float)ImgData[j][0]*0.114+

(float)ImgData[j][1]*0.587+

(float)ImgData[j][2]*0.299);

//将灰度图信息写入

fwrite(ImgData2,j,1,fp2);

//正确的算法(1)

for(i=0;ifi-biHeight;i++)

for(j=0;j(fi-biWidth+3)/4*4;j++)

for(k=0;kk++)

fread(ImgData[j][k],1,1,fp1);

for(j=0;j(fi-biWidth+3)/4*4;j++)

ImgData2[j]=int((float)ImgData[j][0]*0.114+

(float)ImgData[j][1]*0.587+

(float)ImgData[j][2]*0.299);

//将灰度图信息写入

fwrite(ImgData2,j,1,fp2);

//正确算法(2)

unsignedchar**bmp_data;

bmp_data=newunsignedchar*[fi-biHeight];//声明一个指针数组

unsignedchar*data288=newunsignedchar[fi-biHeight*fi-biWidth];

for(i=0;ifi-biHeight;i++)

bmp_data[i]=newunsignedchar[(fi-biWidth*3+3)/4*4];//每个数组元素也是一个指针数组

for(i=0;ifi-biHeight;i++)

for(j=0;j(fi-biWidth*3+3)/4*4;j++)

fread(bmp_data[i][j],1,1,fp1);//每次只读取一个字节,存入数组

for(i=0;ifi-biHeight;i++)//将24位真彩色转换成灰度图

for(j=0;jfi-biWidth;j++){

data288[fi-biWidth*i+j]=((unsignedchar)((float)bmp_data[i][3*j]*0.114+(float)bmp_data[i][3*j+1]*0.587+(float)bmp_data

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论