如何提高绘图效率(GDI,GDI++,Directx)? (转自桌游程序员幸运星空间)

5 篇文章 0 订阅
3 篇文章 0 订阅

GDI 中利用双缓冲技术我们通过在内存中操作的速度远远大于在屏幕上画图的速度的特点解决了刷新屏幕的时候屏幕闪烁的现象。的确如此,在下面的代码我们可以看到 :

LRESULT CVeiwManage ::ReDraw (HDC hdc ,int x ,int y )

{

    HBITMAP m_backbitmap =NULL ;

Create (m_backbitmap ,hdc ,m_myRect .right -m_myRect .left ,m_myRect .bottom -m_myRect .top ,m_bkColor );

    HDC mdc =CreateCompatibleDC (hdc );

    SelectObject (mdc ,m_backbitmap );

    OnPreDraw (mdc );

    OnDraw (mdc );

    OnDrawEnd (mdc );

    if (bTrans )

    {

    TransparentBlt (hdc ,m_myRect .left ,m_myRect .top ,m_myRect .right -m_myRect .leftm_myRect .bottom -m_myRect .top ,mdc ,0,0,m_myRect .right -m_myRect .left ,m_myRect .bottom -m_myRect .top ,crTransColor );

    }

    else

    {

    BitBlt (hdc ,m_myRect .left ,m_myRect .top ,m_myRect .right -m_myRect .left ,

    m_myRect .bottom -m_myRect .top ,mdc ,0,0,SRCCOPY );

    }

    DeleteObject (m_backbitmap );

    DeleteDC (mdc );

    return 0;

}

我们利用了双缓冲技术在一个内存DC 上绘制图片,然后在将内存DC 拷贝到屏幕DC 上。在主窗口中,我们采用帧频为25HZ 的速度刷新屏幕,但是一个新的问题出现了,如果存在很多的GDI 对象,在绘制的过程中CPU 占用达到了30% 以上。如何才能在优化界面的基础上减少CPU 的占用率?我觉得速度瓶颈不在于GDI 输出而在于逻辑和绘图的方法。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值