2012年4月23日 星期一

Flicker Free Drawing

在程式中要畫點, 畫線或是畫圓等, 都要直接對 DC(device context) 操作, 但如果直接對 DC 作畫, 畫面會有明顯的閃爍(flicker), 尤其是整個畫面要重畫時, 最為明顯, 原因是每一次畫的動作, 都會存取到繪圖裝置, 將資料輸出至螢幕, 因此如果減少對繪圖裝置的存取, 畫面閃爍的情況就會好轉, 甚至消失.

如何減少對繪圖裝置的存取呢? 很直覺地會想到先將所有的繪圖動作都 buffering, 最後再一次輸出至繪圖裝置, 而這個 buffer 就是記憶體, 因此其 DC 被稱為 memory DC(memory device context).

大致上 MemDC 的使用方法如下:
  1. 呼叫 CreateCompatibleDC 建立一個 1x1 大小的 memory DC.
  2. 呼叫 CreateCompatibleBitmap 建立一個特定大小的 buffer.
  3. 呼叫 SelectObject 將 buffer 設定至 memory DC.
  4. 開始對 MemDC 作畫.
  5. 呼叫 BitBlt 將 MemDC 的內容至(真實) DC.


更多資訊:
Flicker Free Drawing In MFC
利用memory dc解決畫面閃爍問題
Win32 GDI Double Buffering

沒有留言:

張貼留言