保存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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值