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

来源:互联网 发布:李卫当官 知乎 编辑:程序博客网 时间:2024/05/03 00:54

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.left,  m_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输出而在于逻辑和绘图的方法。

 

原创粉丝点击