(转载)保存CBitmap到文件

VC6中没有CImage,只能用下面的方法将CBitmap保存到文件中。


void  CPCDlg::WriteBmp(CBitmap   *PBitmap, char m_FileName[])   

  {   
    BITMAPINFO   *m_pBMI;   
    BYTE   *m_pDIBData;   
    BITMAPFILEHEADER   bfh;   
    BITMAPINFOHEADER   bi;   
    BITMAP   BM;   
    PBitmap->GetObject(sizeof(BM),&BM);   
    CClientDC   dc(this);   
    bi.biSize     =   sizeof(BITMAPINFOHEADER);   
    bi.biWidth     =   BM.bmWidth;   
    bi.biHeight       =   BM.bmHeight;   
    bi.biPlanes       =   1;   
    bi.biBitCount     =   24;   
    bi.biCompression   =   0;   
    bi.biSizeImage     =   0;   
    bi.biXPelsPerMeter   =   0;   
    bi.biYPelsPerMeter   =   0;   
    bi.biClrUsed     =   0;   
    bi.biClrImportant   =   0;   
            
    bfh.bfType=0x4d42;   
    bfh.bfOffBits=sizeof(bfh)+sizeof(BITMAPINFOHEADER);   
    bfh.bfSize=bfh.bfOffBits+BM.bmWidth*BM.bmHeight*3;   
    bfh.bfReserved1=0;   
    bfh.bfReserved2=0;   
      
    m_pBMI=(BITMAPINFO*)new   char[sizeof(BITMAPINFO)];   
          m_pDIBData=(BYTE*)new   char[bfh.bfSize-bfh.bfOffBits];   
      
    memcpy(m_pBMI,&bi,sizeof(BITMAPINFOHEADER));   
    GetDIBits(dc.GetSafeHdc(),   (HBITMAP)PBitmap->GetSafeHandle(),   0l,   (DWORD)bi.biHeight,   
      (LPVOID)m_pDIBData,(LPBITMAPINFO)m_pBMI,   (DWORD)DIB_RGB_COLORS);   
      CFile   file;   
    if(!file.Open(m_FileName,CFile::modeCreate|CFile::modeWrite))   
    {   
      MessageBox("error!");   
      return;   
    }   
    file.Write(&bfh,sizeof(bfh));   
    file.Write(m_pBMI,sizeof(BITMAPINFOHEADER));   
    file.Write(m_pDIBData,BM.bmWidth*BM.bmHeight*3);   
    file.Close();   
  }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值