下面这段代码是把dc里的位图保存成位图文件,
   
   但是保存的只能用系统自带的画图软件查看,不能用位图查看器查看,比如美图看看,windows图片查看器就查看不了!!!   没分了~~大家见谅,下次补~~~
  
BITMAP bInfo; BYTE *m_pbit;
DWORD m_bitlen;
BITMAPINFO  m_bmpInfoHead;  //位图信息,包括位图信息头
    BITMAPFILEHEADER  m_bmpFileHead; //位图文件头 bit.GetBitmap(&bInfo);
int sz = 0;
//sz = pow(2.0,bInfo.bmBitsPixel) * sizeof(RGBQUAD); m_bitlen = bInfo.bmWidthBytes * bInfo.bmHeight;
m_pbit = new BYTE[m_bitlen]; bit.GetBitmapBits(m_bitlen, m_pbit);
//::GetDIBits(mdc.m_hDC,bit,0,bInfo.bmHeight,m_pbit,&m_bmpInfoHead,DIB_RGB_COLORS); //信息头
m_bmpInfoHead.bmiHeader.biBitCount = bInfo.bmBitsPixel;
m_bmpInfoHead.bmiHeader.biClrImportant = 0;
m_bmpInfoHead.bmiHeader.biClrUsed = 0;
m_bmpInfoHead.bmiHeader.biCompression = BI_RGB;
m_bmpInfoHead.bmiHeader.biHeight = bInfo.bmHeight;
m_bmpInfoHead.bmiHeader.biPlanes = bInfo.bmPlanes;
m_bmpInfoHead.bmiHeader.biSize = sizeof(BITMAPINFO);
m_bmpInfoHead.bmiHeader.biSizeImage = m_bitlen;
m_bmpInfoHead.bmiHeader.biWidth = bInfo.bmWidth;
m_bmpInfoHead.bmiHeader.biXPelsPerMeter = 0;
m_bmpInfoHead.bmiHeader.biYPelsPerMeter = 0;    //文件头
m_bmpFileHead.bfType = 0x4d42;
m_bmpFileHead.bfReserved1 = 0;
m_bmpFileHead.bfReserved2 = 0;
m_bmpFileHead.bfSize = sizeof(BITMAPFILEHEADER);
m_bmpFileHead.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFO) + sz;     CFile SaveFile; 
SaveFile.Open(_T("d:\\qipan.bmp "), CFile::modeCreate | CFile::modeWrite | CFile::shareDenyWrite);  SaveFile.Write(&m_bmpFileHead, sizeof(BITMAPFILEHEADER));
SaveFile.Write(&m_bmpInfoHead, sizeof(BITMAPINFOHEADER)); 
SaveFile.Write(m_pbit, m_bitlen);  SaveFile.Close(); this->MessageBox(_T("dddd")); delete m_pbit;

解决方案 »

  1.   


      这是个偏僻问题吗??
      

  2.   

    把信息头和文件头好好检查一下
      

  3.   

      唔~~~
      哪位仁兄写一个这样的函数给我啊,要调试好的??  万分感谢~~~~ 
      
      

  4.   

    你看一下这个:参考
      

  5.   

    您好
    我是本版版主
    此帖已多日无人关注
    请您及时结帖
    如您认为问题没有解决可按无满意结帖处理
    另外本版设置了疑难问题汇总帖
    并已在版面置顶
    相关规定其帖子中有说明
    您可以根据规定提交您帖子的链接
    如您目前不想结帖只需回帖说明
    我们会删除此结帖通知见此回复三日内无回应
    我们将强制结帖
    相关规定详见界面界面版关于版主结帖工作的具体办法