几种绘制半透明多边形/绘制半透明矩形的方法

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倍。


示例下载:http://download.csdn.net/detail/qq_23992597/9501592
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值