内存里有一组象素数据,24位/象素.我用描点的办法显示出来是正确的.现在想把数据保存为bmp文件.         CBitmap _new;
          BITMAP bm; bm.bmType=0x4D42;
bm.bmWidth=theApp.cf.header.xl;
bm.bmHeight=theApp.cf.header.yl;
bm.bmPlanes=1;
bm.bmWidthBytes=bm.bmWidth*3;
bm.bmBitsPixel=24;
bm.bmBits=theApp.pBuf;

if(_new.CreateBitmapIndirect(&bm)==0)
{
MessageBox(0,"创建位图失败!","gg",0);
return 0;
}
下面是填充BITMAPINFO 和BITMAPFILEHEADER结构,并通过GetBitmapBits()函数获得新的象素数据.
可是发现保存后的bmp图片是左右颠倒的,而且颜色有所改变.

解决方案 »

  1.   

    你应该用GetDIBits而不是GetBitmapBits
      

  2.   

    先写文件头,然后写入bitmap bits即可。
      

  3.   

    如果使用BitBlt获得的屏幕数据想写到文件或是转成其他格式的文件,写完文件头后是否要对位图数据做变换,还是直接写就可以了?
      

  4.   

    我现在已经可以存入文件了,但是发现保存的文件颜色有点对不上.像素数据没变,就是用windows自带的画图程序打开时颜色发生了变化.