我用VC++写的存图像的程序,为啥保存了的BMP图像打不开,说是照片查看器不支持此个格式,
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我用VC++写的存图像的程序,为啥保存了的BMP图像打不开,说是照片查看器不支持此个格式,相关的知识,希望对你有一定的参考价值。
但是我就是写的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);
BMP头文件是对的
以上是关于我用VC++写的存图像的程序,为啥保存了的BMP图像打不开,说是照片查看器不支持此个格式,的主要内容,如果未能解决你的问题,请参考以下文章