我写的BMP位图打开读取数据与保存函数 为什么最后得到的BMP图片绘图失败?
这是我写的BMP位图读取函数
BYTE * readImageDatabmp(LPSTR strFileName,int * pwidth,int * pheight)
{
int filesize;
FILE * pFile;
struct tagBITMAPFILEHEADER bmpFileHdr;
struct tagBITMAPINFOHEADER bmpInfoHdr;
struct tagRGBTRIPLE rgb;
BYTE * DataBuf;
long BufSize;
int offset;
if((pFile=fopen(strFileName,"rb"))==NULL) //打开图象文件
return NULL;
fseek( pFile,0,SEEK_SET); //找到文件头
fread(&bmpFileHdr,sizeof(tagBITMAPFILEHEADER),1, pFile); //读取文件头
filesize=bmpFileHdr.bfSize;
if(bmpFileHdr.bfType==0x4d42) //判断是否为BMP图片
{
fread(&bmpInfoHdr,sizeof(tagBITMAPINFOHEADER),1, pFile); //读取信息头
fread(&rgb,sizeof(tagRGBTRIPLE),1,pFile);
Bps=bmpInfoHdr.biBitCount;
*pwidth=bmpInfoHdr.biWidth; //文件的宽度(以像素为单位)
*pheight=bmpInfoHdr.biHeight; //文件的长度(以像素为单位)
offset=sizeof(bmpFileHdr)+sizeof(bmpInfoHdr)+(int)pow(2,Bps)*sizeof(rgb);
BufSize=(*pwidth)*(*pheight)/(8/Bps);
DataBuf=new BYTE[BufSize];
fseek( pFile,offset,SEEK_SET);//指针指到位图像素值起始位置
fread(&DataBuf,sizeof(BYTE),BufSize, pFile);
fclose(pFile); //关闭图象文件
return DataBuf;
}
else
return NULL;
}
这是我写的BMP位图保存函数
int different::saveBmp(LPSTR bmpFile,int width,int height,BYTE* Data,int bmpBps)
{
struct tagBITMAPFILEHEADER bmpFileHdr;
struct tagBITMAPINFOHEADER bmpInfoHdr;
struct tagRGBQUAD rgb;
//FileHeader
bmpFileHdr.bfType=0x4D42;
bmpFileHdr.bfSize=(width/(8/bmpBps))*height+sizeof(bmpFileHdr)+sizeof(bmpInfoHdr)+(int)pow(2,bmpBps)*sizeof(rgb);
bmpFileHdr.bfReserved1=0;
bmpFileHdr.bfReserved2=0;
bmpFileHdr.bfOffBits=(DWORD)(sizeof(bmpFileHdr)+sizeof(bmpInfoHdr)+(int)pow(2,bmpBps)*sizeof(rgb));
//
bmpInfoHdr.biSize=sizeof(BITMAPINFOHEADER);
bmpInfoHdr.biWidth=width;
bmpInfoHdr.biHeight=height;
bmpInfoHdr.biPlanes=1;
bmpInfoHdr.biBitCount=bmpBps;
bmpInfoHdr.biCompression=0;
bmpInfoHdr.biSizeImage=0;
bmpInfoHdr.biXPelsPerMeter=200;
bmpInfoHdr.biYPelsPerMeter=200;
bmpInfoHdr.biClrUsed=(int)pow(2,bmpBps);
bmpInfoHdr.biClrImportant=0;
FILE* BmpOut=fopen(bmpFile,"wb");
fwrite(&bmpFileHdr,sizeof(tagBITMAPFILEHEADER),1,BmpOut); //写文件头
fwrite(&bmpInfoHdr,sizeof(tagBITMAPINFOHEADER),1,BmpOut); //写信息头
for (int k=255;k>=0;k=k-255/((int)pow(2,bmpBps)-1))
{
rgb.rgbBlue=255-k;
rgb.rgbGreen=255-k;
rgb.rgbRed=255-k;
rgb.rgbReserved=0;
fwrite(&rgb,sizeof(rgb),1,BmpOut);
}
//写每个像素值信息
int size=(width*height)/(8/Bps);
fwrite(&Data,size,1,BmpOut);
fclose(BmpOut);
return 0;
}
为什么经过读取后执行保存函数之后得到的图片似乎是只有文件头、信息头、颜色表数据的文件 打开图片,显示绘图失败 望指教!!!