在WinCE下拷屏并保存为BMP图片

在WinCE下拷屏并保存为BMP图片 

2011-01-12 15:32:40|  分类: 默认分类 |  标签: |字号 订阅

前几天要写一段在Windows CE 下拷屏的程序,但是CE不支持GetDIBits这个API,这可难坏了我,在网上查了半天资料,最后用CreateDIBSection搞定,现封装成一个函数SaveDCToBMP,方便大家使用。
void SaveDCToBMP(HDC hDC,int nStartX,int nStartY,
      int nWidth,int nHeight,LPCTSTR szFileName)
{
 //定义图形色深
 int iPixel = 32; //根据具体可赋值24
//位图信息头
 LPBITMAPINFO lpbmih = new BITMAPINFO;
 lpbmih->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
 lpbmih->bmiHeader.biWidth = nWidth;
 lpbmih->bmiHeader.biHeight = nHeight;
 lpbmih->bmiHeader.biPlanes = 1;
 lpbmih->bmiHeader.biBitCount = iPixel;
 lpbmih->bmiHeader.biCompression = BI_RGB;
 lpbmih->bmiHeader.biSizeImage = 0;
 lpbmih->bmiHeader.biXPelsPerMeter = 0;
 lpbmih->bmiHeader.biYPelsPerMeter = 0;
 lpbmih->bmiHeader.biClrUsed = 0;
 lpbmih->bmiHeader.biClrImportant = 0;
 //创建位图数据
 HDC hdcMem;
 HBITMAP hBitMap = NULL;
 CBitmap *pBitMap = NULL;
 CDC *pMemDC = NULL;
 BYTE *pBits;
 hdcMem = CreateCompatibleDC(hDC);
 hBitMap = CreateDIBSection(hdcMem,lpbmih,DIB_PAL_COLORS,(void **)&pBits,NULL,0);
 pBitMap = new CBitmap;
 pBitMap->Attach(hBitMap);
 pMemDC = new CDC;
 pMemDC->Attach(hdcMem);
 pMemDC->SelectObject(pBitMap);
pMemDC->BitBlt(0,0,nWidth,nHeight,CDC::FromHandle(hDC),nStartX,nStartY,SRCCOPY);
 BITMAPFILEHEADER bmfh;//位图文件头
 ZeroMemory(&bmfh,sizeof(BITMAPFILEHEADER));
 *((char *)&bmfh.bfType) = 'B';
 *(((char *)&bmfh.bfType) + 1) = 'M';
 bmfh.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
 bmfh.bfSize = bmfh.bfOffBits + (nWidth * nHeight) * iPixel / 8;
 int iBMPBytes = nWidth * nHeight * iPixel / 8;
 CFile file;
 if(file.Open(szFileName,CFile::modeWrite | CFile::modeCreate))
 {
   file.Write(&bmfh,sizeof(BITMAPFILEHEADER));
   file.Write(&(lpbmih->bmiHeader),sizeof(BITMAPINFOHEADER));
   file.Write(pBits,iBMPBytes);
   file.Close();
 }
DeleteObject(hBitMap);
 DeleteObject(hDC);
 pMemDC->DeleteDC();
 delete pMemDC; pMemDC = NULL;
 delete pBitMap; pBitMap = NULL;
 delete lpbmih; lpbmih = NULL
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值