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;
} 展开
程序如下(全部程序 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;
} 展开
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询