瞧瞧这个将CBitmap写到Bmp文件里的函数 (转)

本文介绍了一个简单的函数,用于将CBitmap对象的内容写入24位颜色的BMP文件中。该函数通过获取位图信息并使用GetDIBits函数读取像素数据来实现。文中还提供了完整的代码示例。
瞧瞧这个将CBitmap写到Bmp文件里的函数 (转)[@more@]

首先,这个函数只能针对24色的bitmap.

void CAppDlg::WriteBmp(CBitmap *PBitmap)
{
 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();
 delete m_pBMI;
 delete m_pDIBData;


}

其实横简单吧!在本站的GetPicture软件中有源代码.


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10752043/viewspace-987437/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10752043/viewspace-987437/

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值