vc创建半透明画刷
来源:互联网 发布:淘宝客户端改差评 编辑:程序博客网 时间:2024/05/22 23:41
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+。
使用Direct Draw时,注意,绘制半透明多边形的时候,因为牵涉到已有的图像数据,所以会对绘图页面原有的图像进行读取操作。如果当前绘制页面开辟在显存中的时候,对显存的读操作会导致整个渲染流水线的暂停,从而严重影响程序的效率,此时,绘制半透明多边形就会变得异常的慢。这时候需要将绘制页面从显存中更改至内存中。或者在内存中创建一个过度页面,绘制完成后再往显存页面上贴图。效率会有显著提升,实测:提升30~40倍。
- vc创建半透明画刷
- VC实现半透明对话框
- VC实现半透明窗口
- VC 设置窗口半透明
- (VC)半透明的实现
- VC++设置半透明界面
- vc++ 绘制半透明矩形
- VC半透明窗体
- Swing创建半透明按钮
- VC图片的半透明处理
- VC图片的半透明处理
- VC图片的半透明处理
- vc实现异形半透明窗体
- VC如何让窗口半透明
- VC半透明透明子窗体
- MFC创建椭圆形半透明对话框
- VC用AlphaBlend实现半透明位图
- VC实现半透明对话框的代码
- PHP的三种运行方式
- Android externel目录分析
- 广州传智播客0608Java基础班广州笑翻天拓展活动
- 位运算
- Android定制出厂默认输入法
- vc创建半透明画刷
- ajax异步处理
- C++引用与指针的比较
- 【Curl (libcurl) 开发 之一】Cocos2dx之libcurl(curl_easy)的编程教程(帮助手册
- SQL语句(inner join,left out join,right out join三者的不同用法)
- 蜗牛!快爬!
- 对象的声明与实例化
- android调节音频
- VOID和PVOID