要保存一个BMP的一部分,从结果上看文件的头进来了,但是图像数据都没进来
Xbmp,Ybmp是图像上确定部分的坐标 BITMAPINFOHEADER  bifh;
BITMAPFILEHEADER  bfh; 
///////////////////////////////////////////////
//Save File1
{ ////////////////////////////////////////////////////
//DIB
BYTE *pSrc =(BYTE *)::GlobalAlloc(GPTR,Xbmp*Ybmp);
bifh.biBitCount=24;
bifh.biClrImportant=0;
bifh.biClrUsed=0;
bifh.biCompression=0;
bifh.biHeight=Ybmp;
bifh.biPlanes=1;
bifh.biSize=sizeof(BITMAPINFOHEADER);
bifh.biSizeImage=Xbmp*Ybmp;
bifh.biWidth=Xbmp;
bifh.biXPelsPerMeter=0;
bifh.biYPelsPerMeter=0;
HDC hDC=::GetDC(NULL);
long nRet;
nRet=::GetDIBits(hDC,hBitmap,0,Ybmp,pSrc,(BITMAPINFO *)&bifh,DIB_RGB_COLORS);
/*if (nRet!=Ybmp)
{
DeleteDC(hDC);
GlobalFree(pSrc);
}
::ReleaseDC(NULL,hDC);*/
/////////////////////////////////////////////////
//
bfh.bfReserved1=bfh.bfReserved2=0;
bfh.bfType=((WORD)('M'<<8)|'B');
bfh.bfSize=Xbmp*Ybmp;
FILE *stream;
if((stream = fopen("1.bmp","w"))!=NULL)
{
fwrite(&bfh,1,sizeof(BITMAPFILEHEADER),stream);
fwrite(&bifh,1,sizeof(BITMAPINFOHEADER),stream);
fwrite(pSrc,1,Xbmp*Ybmp,stream);
fclose(stream);
}
GlobalFree(pSrc);

解决方案 »

  1.   

    是不是不够完整,这里倒有个例子,可以参考:
    http://www.yangning.com/cgi-bin/topic.cgi?forum=1&topic=82&show=0
      

  2.   

    bifh.biSizeImage=Xbmp*Ybmp;????
    是不是应该bifh.biSizeImage=Xbmp*Ybmp*3;
      

  3.   

    你很多地方需要*3啊,仔细看看,Xbmp*Ybmp的地方都要 *3。
      

  4.   

    呵呵,bifh.biBitCount=24; 24位图
    bifh.biSizeImage=Xbmp*Ybmp*3;
    bifh.biBitCount=8;才是bifh.biSizeImage=Xbmp*Ybmp;