编写一个程序,读取一张bmp图片数据,转化为灰度图片保存到另一个文件中

 我来答
努力的我12
2012-06-23
知道答主
回答量:6
采纳率:0%
帮助的人:8.8万
展开全部
最近在做,正好写了一个,分享给你,这是一个特例,建议你要了解bmp的结构,然后获取其中的信息,把这个程序普通化……
#include<iostream>
#include<stdio.h>
#include<math.h>
using namespace std;
typedef unsigned char BYTE;
long Arry2DW(unsigned char p[4])
{
int a0,a1,a2,a3;
unsigned long A;
a0=int(p[0]);
a1=int(p[1]);
a2=int(p[2]);
a3=int(p[3]);
A=a3*256*256*256+a2*256*256+a1*256+a0;
return A;
}
long Arry2W(unsigned char p[2])
{
int a0,a1;
long A;
a0=int(p[0]);
a1=int(p[1]);
A=a1*256+a0;
return A;
}
typedef struct tagBMPFLEHEADER
{
BYTE bfType[2];
BYTE bfSize[4];
BYTE bfReserved1[2];
BYTE bfReserved2[2];
BYTE bfOfBits[4];
}BMPFLEHEADER;
typedef struct tagBMPINFHEADER
{
BYTE biSize[4];
BYTE biWidth[4];
BYTE biHeight[4];
BYTE biPlanes[2];
BYTE biBitCount[2];
BYTE biCompression[4];
BYTE biSizeImage[4];
BYTE biXpelsPerMeter[4];
BYTE biYpelsPerMeter[4];
BYTE biChUsed[4];
BYTE biCtrlmportant[4];
}BMPINFHEADER;
typedef struct BitmapFile
{
BMPFLEHEADER bmfheader;
BMPINFHEADER bminfoheader;
BYTE bitmapdata[1428752];
}bitmap;
int main()
{
bitmap * temp;
FILE * fp,*fp1;
BYTE R[635][750],G[635][750],B[635][750];
if((fp=fopen("D://source/temp.bmp","rb"))==NULL) if((fp=fopen("try1.bmp","rb"))==NULL)
{
cout<<"error";
return 0;
}
if((fp1=fopen("try1.bmp","wb"))==NULL)
{
cout<<"error";
return 0;
}
if(!(temp=new bitmap))
{
cout<<"error";
return 0;
}
fread(temp,sizeof(bitmap),1,fp);
int r,g,b,gray=0;
for(k=0;k<1428749;k+=3)
{
b=temp->bitmapdata[k];
g=temp->bitmapdata[k+1];
r=temp->bitmapdata[k+2];
if(b>g)
gray=b;
else gray=g;
if(gray<r)
gray=r;
temp->bitmapdata[k]=temp->bitmapdata[k+1]=temp->bitmapdata[k+2]=gray;
}
fwrite(temp,sizeof(bitmap),1,fp1);
fclose(fp);
fclose(fp1);
return 0;
}
木头225
2012-06-24 · TA获得超过605个赞
知道小有建树答主
回答量:243
采纳率:0%
帮助的人:242万
展开全部
用matlab吧,轻松又方便
I_rgb=imread('ABC.bmp');%图片和你程序放同一个文件夹下
I_gray=rgb2gray(I_rgb);
imshow(I_gray);
imwrite(I_gray,'gray.bmp')
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
oqqai123
2012-06-25 · 超过12用户采纳过TA的回答
知道答主
回答量:40
采纳率:100%
帮助的人:32万
展开全部
建议你看看bmp文件头再写程序,要不你读取的数据会出错
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式