c++的BMP图像写入写出问题 50

用C++写了段BMP图像边缘检测程序,写完发现很小的BMP图片能正常输出,但是大的BMP文件输出后打开时是显示图片过大或者已损坏,程序应当怎么修改?程序如下(全部程序ht... 用C++写了段BMP图像边缘检测程序,写完发现很小的BMP图片能正常输出,但是大的BMP文件输出后打开时是显示图片过大或者已损坏,程序应当怎么修改?

程序如下(全部程序 http://pan.baidu.com/s/1ntuumUH):

//保存bmp图片
if((fpw=fopen("b.bmp","wb"))==NULL)
{
cout<<"create the bmp file error!"<<endl;
return NULL;
}
WORD bfType_w=0x4d42;
fwrite(&bfType_w,1,sizeof(WORD),fpw);

//fpw +=2;
fwrite(&strHead,1,sizeof(tagBITMAPFILEHEADER),fpw);
fwrite(&strInfo,1,sizeof(tagBITMAPINFOHEADER),fpw);
//保存调色板数据
for(unsigned int nCounti=0;nCounti<strInfo.biClrUsed;nCounti++)
{
fwrite(&strPla[nCounti].rgbBlue,1,sizeof(BYTE),fpw);
fwrite(&strPla[nCounti].rgbGreen,1,sizeof(BYTE),fpw);
fwrite(&strPla[nCounti].rgbRed,1,sizeof(BYTE),fpw);
fwrite(&strPla[nCounti].rgbReserved,1,sizeof(BYTE),fpw);
}
//保存像素数据
for(int i =0;i < height;++i)
{
for(int j = 0;j < width;++j)
{
fwrite( &(*(imagedataOut + i * width + j)).red,1,sizeof(BYTE),fpw);//注意三条语句的顺序:否则颜色会发生变化
fwrite( &(*(imagedataOut + i * width + j)).green,1,sizeof(BYTE),fpw);
fwrite( &(*(imagedataOut + i * width + j)).blue,1,sizeof(BYTE),fpw);
}
}

fclose(fpw);

//释放内存
delete[] imagedata;
delete[] imagedataGary ;
delete[] imagedataOut;
}
展开
 我来答
88447821
2015-05-18 · TA获得超过1503个赞
知道小有建树答主
回答量:729
采纳率:100%
帮助的人:299万
展开全部
fwrite(&strHead,1,sizeof(tagBITMAPFILEHEADER),fpw);
fwrite(&strInfo,1,sizeof(tagBITMAPINFOHEADER),fpw);
看不出来头的赋值情况,而且建议考虑是不是需要字节对齐。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式