为什么要使用双缓冲绘制 在进行多图元绘制的时候: 因为是要一个一个画上去,所以每画一个图元,系统就要做一次图形的绘制操作,图形的重绘是很占用资源的,特别当需要重绘的图形数量很多的时候,所造成的消耗就特别大,导致闪烁,不流畅等情况。那么如何来解决这个问题呢? 那就是双缓冲.
它的基本原理就是 先在内存中开辟一块虚拟画布,然后将所有需要画的图元一个个先画在这块“虚拟画布”上,最后在一次性将整块“虚拟画布”画到真正的窗体上。因为所有的单个图形的绘制都不是真正的调用显示系统来“画”,所以不会占用显示系统的开销,极大的提高的绘图效率,避免闪烁,不流畅等现象。
GDI+实现双缓冲的具体步骤 IDE : VC++/VS.NET C++ 1.在内存中建立一块“虚拟画布”: //获取窗口客区宽高 RECT r; GetClientRect(m_hWnd,&r); m_bufW=r.right; m_bufH=r.bottom; //在内存中建立一个Image的派生类Bitma对象做为"画布" Bitmap memBitmap(m_bufW,m_bufH); 2.获取这块内存画布的Graphics引用: Graphics memGr(&memBitmap); 3.在这块内存画布上绘图: //这里可以通过memGr在memBitmap上绘制多个图元 //我只举例绘制了一张图片 Image* pimage=NULL; int h=pimage->GetHeight(); pimage=NULL; 4、将内存画布画到窗口中 m_hDC = GetDC(m_hWnd); Graphics gr(m_hDC); gr.DrawImage(&memBitmap,0,0); ReleaseDC(m_hWnd,m_hDC);
|
|