MFC 绘制透明位图的方法
来源:互联网 发布:向量组的秩和矩阵的秩 编辑:程序博客网 时间:2024/05/17 22:24
1、GDI
步骤1)创建内存兼容DC
HDC hBitmapDC = CreateCompatibleDC(hDC);
HBITMAP hBitmap = CreateCompatibleBitmap(hDC, rt.Width(), rt.Height());
SelectObject(hBitmapDC,hBitmap);
步骤2)在内存DC中绘图
FillRgn(hBitmapDC, (HRGN)rgn, (HBRUSH)m_pGdiBrush);
Rectangle(hBitmapDC, 0, 0, 100, 100);
...
步骤3) 半透明混合
BLENDFUNCTION bf;
bf.BlendOp = AC_SRC_OVER;
bf.BlendFlags = 0;
bf.AlphaFormat = 0;
bf.SourceConstantAlpha = 50;
AlphaBlend(hDC,rt.left,rt.top,rt.Width(),rt.Height(),hBitmapDC,0,0,rt.Width(),rt.Height(),bf);
2、GDI+
步骤1) 创建半透明画刷
m_pBrush = new SolidBrush(Color(128, GetRValue(clrMask), GetGValue(clrMask), GetBValue(clrMask))); // 透明度 128
步骤2)使用画刷绘图
Graphics graphics(hDC);
graphics.FillPolygon(&m_pBrush, pts, 3, FillModeAlternate);
效率: GDI+ > GDI。
使用GDI+绘图简单而高效,所以推荐使用GDI+。
3、Direct Draw
此方法比较复杂,没有对Direct Draw有一定的了解,不推荐此方法。
代码比较多,不做列举,需要注意的地方有:
使用Direct Draw时,注意,绘制半透明多边形的时候,因为牵涉到已有的图像数据,所以会对绘图页面原有的图像进行读取操作。如果当前绘制页面开辟在显存中的时候,对显存的读操作会导致整个渲染流水线的暂停,从而严重影响程序的效率,此时,绘制半透明多边形就会变得异常的慢。这时候需要将绘制页面从显存中更改至内存中。或者在内存中创建一个过度页面,绘制完成后再往显存页面上贴图。效率会有显著提升,实测:提升30~40倍。
- MFC 绘制透明位图的方法
- MFC 绘制透明背景位图
- 透明位图的绘制
- VC透明位图的绘制
- windows下透明位图的绘制
- 绘制“透明”位图
- 绘制“透明”位图
- 位图透明绘制
- 绘制透明位图
- GDI绘制透明位图
- 绘制透明背景位图
- 绘制透明背景位图
- 创建透明位图的方法
- MFC透明位图(1)--BMP的实现
- MFC透明位图(2)--PNG的实现
- MFC透明位图(2)--PNG的实现
- MFC透明位图(1)--BMP的实现 .
- MFC中实现位图的透明显示
- 从硬盘安装CentOS7.0时遇到的一些错误和解决办法
- 【iOS开发-6】iOS框架以及手册的在线阅读和PDF版本的iOS Technology Overview下载
- google访问方法
- B树、B-树、B+树、B*树
- 判断一个整数是否回文整数,不用辅助数组!
- MFC 绘制透明位图的方法
- hdu 5019 第k大公约数
- sql一对多 多的一方按逗号隔开显示
- 【LeetCode】-Binary Tree Level Order Traversal
- js基础知识大总结
- C#中跨线程访问控件: 委托, Invoke, BeginInvoke
- Django + Python + MySQL 的开发与部署
- 微信模板的换行
- android开发步步为营之41:spinner的用法