如何提高繪圖效率(GDI,GDI++,Directx)? (轉自桌遊程序員幸運星空間)

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 輸出而在於邏輯和繪圖的方法。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章