创建WINCE下16位格式位图实现快速BitBlt

原文地址::http://dev.wo.com.cn/bbs/post.jsp?action=reply&flag=-1004448091&fid=25136&tid=121121&extra=page%3D1&page=10


相关网帖

1.[VC6] 图像文件格式数据查看器----http://www.cnblogs.com/hoodlum1980/archive/2010/09/05/1818308.html


创建WINCE下16位格式位图实现快速BitBlt

在WINCE下,如果创建的位图与屏幕设备格式不一样,将会导致BitBlt函数极为缓慢,因此需要创建一幅16位色565格式位图,用此方法创建出的位图可以提供1ms的快速BitBlt绘制。当然,如果设备不是565颜色格式的,更改代码中的颜色掩码位bmiColors就可以了。

view plain
  1. //
  2. ///@brief创建一幅缓存图像。
  3. ///@param[out]pHBitmap生成的位图句柄。
  4. ///@param[out]pData生成的位图中的数据位置。
  5. ///@param[in]hDC目标DC句柄。
  6. ///@param[in]width位图宽度。
  7. ///@param[in]height位图高度。
  8. ///@param[in]bitCount每个像素占多少个bit。
  9. ///@attention创建的位图是无压缩格式的。
  10. ///@authorLoongee
  11. ///@date2010/01/15
  12. //
  13. voidCreateBufferBitmap(HBITMAP*pHBitmap,void**pData,
  14. HDChDC,LONGwidth,LONGheight,WORDbitCount)
  15. {
  16. BITMAPINFO&bmpInfo=*(BITMAPINFO*)newBYTE[sizeof(bmpInfo)+sizeof(RGBQUAD)*3];
  17. bmpInfo.bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
  18. bmpInfo.bmiHeader.biWidth=width;
  19. bmpInfo.bmiHeader.biHeight=height;
  20. bmpInfo.bmiHeader.biPlanes=1;
  21. bmpInfo.bmiHeader.biBitCount=bitCount;
  22. if(bitCount==16)
  23. {
  24. bmpInfo.bmiHeader.biCompression=BI_BITFIELDS;
  25. *(DWORD*)(&bmpInfo.bmiColors[0])=0xF800;
  26. *(DWORD*)(&bmpInfo.bmiColors[1])=0x07E0;
  27. *(DWORD*)(&bmpInfo.bmiColors[2])=0x001F;
  28. }
  29. else
  30. {
  31. bmpInfo.bmiHeader.biCompression=BI_RGB;
  32. }
  33. bmpInfo.bmiHeader.biSizeImage=0;
  34. bmpInfo.bmiHeader.biXPelsPerMeter=1000;
  35. bmpInfo.bmiHeader.biYPelsPerMeter=1000;
  36. bmpInfo.bmiHeader.biClrUsed=0;
  37. bmpInfo.bmiHeader.biClrImportant=0;
  38. *pHBitmap=CreateDIBSection(hDC,&bmpInfo,DIB_RGB_COLORS
  39. ,pData,NULL,0);
  40. delete[](BYTE*)&bmpInfo;
  41. }

http://blog.csdn.net/loongee/article/details/6333489



//==============================================================

备注::

1>必须注意要BITMAPINFO&bmpInfo=*(BITMAPINFO*)newBYTE[sizeof(bmpInfo)+sizeof(RGBQUAD)*3];要不然后面的*(DWORD*)(&bmpInfo.bmiColors[0])=0xF800;没有存储的空间,也传不进创建DIB的函数里面去----这样会造成DEBUG跟RELEASE版本不一样,我就被这个痛苦地折腾了一回,得有个记性了。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值