有一幅jpeg图像,我读入其数据后,然后按bmp格式保存,结果保存后图片跟原来图片颜色差异很大,不知道什么原因,望高手指点一下,谢谢!我用得代码如下: //位图信息头参数相关设置
BITMAPINFOHEADER *InfoHeader=new BITMAPINFOHEADER;
memset(InfoHeader,0,sizeof(BITMAPINFOHEADER));
InfoHeader->biSize =sizeof(BITMAPINFOHEADER);
InfoHeader->biPlanes =1;
InfoHeader->biBitCount =24;
InfoHeader->biCompression =0;
InfoHeader->biWidth =cinfo.image_width; //设置信息头的参数之一---图片宽度
InfoHeader->biHeight =height;
InfoHeader->biSizeImage =height*cinfo.image_width*cinfo.num_components;
//位图文件头参数相关设置
memset(fileheader,0,sizeof(BITMAPFILEHEADER));
fileheader->bfType =0x4D42;
fileheader->bfSize =sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+height*cinfo.image_width*cinfo.num_components;
fileheader->bfOffBits=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER); /********************************************************/
FILE *fp;
char *path="E:\\VC++\\project\\ferrograph\\temp.bmp";
if((fp=fopen(path,"wb"))==0)//输入要打开的文件
{
return;
}
fwrite(fileheader,1,sizeof(BITMAPFILEHEADER),fp);
fwrite(InfoHeader,1,sizeof(BITMAPINFOHEADER),fp);
fwrite(m_pData,sizeof(BYTE),height*cinfo.image_width*cinfo.num_components,fp);//m_pData是图像数据,这个绝对没有问题,我用它跟matlab读取的像素值对照过了
/********************************************************/
BITMAPINFOHEADER *InfoHeader=new BITMAPINFOHEADER;
memset(InfoHeader,0,sizeof(BITMAPINFOHEADER));
InfoHeader->biSize =sizeof(BITMAPINFOHEADER);
InfoHeader->biPlanes =1;
InfoHeader->biBitCount =24;
InfoHeader->biCompression =0;
InfoHeader->biWidth =cinfo.image_width; //设置信息头的参数之一---图片宽度
InfoHeader->biHeight =height;
InfoHeader->biSizeImage =height*cinfo.image_width*cinfo.num_components;
//位图文件头参数相关设置
memset(fileheader,0,sizeof(BITMAPFILEHEADER));
fileheader->bfType =0x4D42;
fileheader->bfSize =sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+height*cinfo.image_width*cinfo.num_components;
fileheader->bfOffBits=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER); /********************************************************/
FILE *fp;
char *path="E:\\VC++\\project\\ferrograph\\temp.bmp";
if((fp=fopen(path,"wb"))==0)//输入要打开的文件
{
return;
}
fwrite(fileheader,1,sizeof(BITMAPFILEHEADER),fp);
fwrite(InfoHeader,1,sizeof(BITMAPINFOHEADER),fp);
fwrite(m_pData,sizeof(BYTE),height*cinfo.image_width*cinfo.num_components,fp);//m_pData是图像数据,这个绝对没有问题,我用它跟matlab读取的像素值对照过了
/********************************************************/
wjqzzzy
(天华) 等 级:
结帖率:0.00%
先贴个图看看吧?
是否有图形错位现象?
还是仅仅颜色对应有问题?
代码太少,看不出来。
这句应该有问题
好像m_pData里的数据都是32位的
把
InfoHeader->biBitCount =24;
改成
InfoHeader->biBitCount =32;
试试