我用VC++写的存图像的程序,为什么保存了的BMP图像打不开,说是照片查看器不支持此个格式, 10
但是我就是写的BMP图像啊一开始第一数据时0x4d42,下面是保存图像的那段程序,IMAGEDATA*imagedatafenge=NULL;//动态分配分割后的图片的像...
但是我就是写的BMP图像啊 一开始第一数据时 0x4d42,下面是保存图像的那段程序,
IMAGEDATA *imagedatafenge = NULL; //动态分配分割后的图片的像素信息的二维数组
imagedatafenge = &(*(imagedata + i * width + j + 10) );
imagedatafenge = (IMAGEDATA*)malloc(width * height * sizeof(IMAGEDATA));
//初始化分割后图片的像素数组
for( i = 0;i < height;++i)
{
for(int j = 0;j < width;++j)
{
(*(imagedatafenge + i * width + j)).blue = 0;
(*(imagedatafenge + i * width + j)).green = 0;
(*(imagedatafenge + i * width + j)).red = 0;
}
}
IMAGEDATAhsv* imagedatahsv = NULL; //动态分配HSV图片的像素信息的二维数组
imagedatahsv = (tagIMAGEDATAhsv*)malloc(width * height * sizeof(IMAGEDATAhsv));
//初始HSV图片的像素数组
for( i = 0;i < height;++i)
{
for(int j = 0;j < width;++j)
{
(*(imagedatahsv + i * width + j)).hhh = 0;
(*(imagedatahsv + i * width + j)).sss = 0;
(*(imagedatahsv + i * width + j)).vvv = 0;
}
}
fpw=fopen("b.bmp","wb");
if(fpw==NULL)
{
cout<<"create the bmp file error!"<<endl;
return NULL;
}
/*WORD bfType_w = 0x4d42; //定义保存文件类型为BMP
fwrite(&bfType_w,sizeof(BYTE),1,fpw);
//fpw +=2; */
fwrite(&strHead,sizeof(tagBITMAPFILEHEADER),1,fpw);
fwrite(&strInfo,sizeof(tagBITMAPINFOHEADER),1,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( i =0;i < height;++i)
{
for( int j = 0;j < width;++j)
{
fwrite( &((*(imagedatafenge + i * width + j)).red),sizeof(BYTE),1,fpw);//注意三条语句的顺序:否则颜色会发生变化
fwrite( &((*(imagedatafenge + i * width + j)).green),sizeof(BYTE),1,fpw);
fwrite( &((*(imagedatafenge + i * width + j)).blue),sizeof(BYTE),1,fpw);
}
}
fclose(fpw); 展开
IMAGEDATA *imagedatafenge = NULL; //动态分配分割后的图片的像素信息的二维数组
imagedatafenge = &(*(imagedata + i * width + j + 10) );
imagedatafenge = (IMAGEDATA*)malloc(width * height * sizeof(IMAGEDATA));
//初始化分割后图片的像素数组
for( i = 0;i < height;++i)
{
for(int j = 0;j < width;++j)
{
(*(imagedatafenge + i * width + j)).blue = 0;
(*(imagedatafenge + i * width + j)).green = 0;
(*(imagedatafenge + i * width + j)).red = 0;
}
}
IMAGEDATAhsv* imagedatahsv = NULL; //动态分配HSV图片的像素信息的二维数组
imagedatahsv = (tagIMAGEDATAhsv*)malloc(width * height * sizeof(IMAGEDATAhsv));
//初始HSV图片的像素数组
for( i = 0;i < height;++i)
{
for(int j = 0;j < width;++j)
{
(*(imagedatahsv + i * width + j)).hhh = 0;
(*(imagedatahsv + i * width + j)).sss = 0;
(*(imagedatahsv + i * width + j)).vvv = 0;
}
}
fpw=fopen("b.bmp","wb");
if(fpw==NULL)
{
cout<<"create the bmp file error!"<<endl;
return NULL;
}
/*WORD bfType_w = 0x4d42; //定义保存文件类型为BMP
fwrite(&bfType_w,sizeof(BYTE),1,fpw);
//fpw +=2; */
fwrite(&strHead,sizeof(tagBITMAPFILEHEADER),1,fpw);
fwrite(&strInfo,sizeof(tagBITMAPINFOHEADER),1,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( i =0;i < height;++i)
{
for( int j = 0;j < width;++j)
{
fwrite( &((*(imagedatafenge + i * width + j)).red),sizeof(BYTE),1,fpw);//注意三条语句的顺序:否则颜色会发生变化
fwrite( &((*(imagedatafenge + i * width + j)).green),sizeof(BYTE),1,fpw);
fwrite( &((*(imagedatafenge + i * width + j)).blue),sizeof(BYTE),1,fpw);
}
}
fclose(fpw); 展开
展开全部
至少说明位图信息头正确。
追问
BMP头文件是对的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |