您的位置:首页 > 职场人生

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

2010-10-25 22:58 351 查看


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

输出而在于逻辑和绘图的方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: