雙重緩衝的圖形

閃爍是編寫圖形程式碼時常見的問題。 需要多個複雜繪製作業的圖形作業可能會導致轉譯的影像出現閃爍,或具有無法接受的外觀。 為了解決這些問題,.NET Framework 提供雙重緩衝的存取。

雙重緩衝會使用記憶體緩衝區來解決多個與繪製作業建立關聯的閃爍問題。 啟用雙重緩衝時,會將所有繪製作業都轉譯到記憶體緩衝區,而不是螢幕上的繪圖介面。 在所有繪製作業都完成之後,會直接將記憶體緩衝區複製到與其建立關聯的繪圖介面。 因為只對螢幕執行一個圖形作業,所以可排除與複雜繪製作業建立關聯的影像閃爍。

預設雙重緩衝

在應用程式中使用雙重緩衝的最簡單方式,是使用 .NET Framework 所提供之表單和控制項的預設雙重緩衝。 您可以使用 SetStyle 方法,將屬性設定 DoubleBuffered 為或,以 true 啟用 Windows Forms 的預設雙重緩衝,並撰寫 Windows 控制項。 如需詳細資訊,請參閱如何:使用表單和控制項的雙重緩衝以減少圖形閃爍

手動管理已緩衝的圖形

若是動畫或進階記憶體管理這類更進階雙重緩衝案例,您可以使用 .NET Framework 類別來實作您自己的雙重緩衝邏輯。 負責配置和管理個別圖形緩衝區的類別是 BufferedGraphicsContext 類別。 每個應用程式域都有自己的預設 BufferedGraphicsContext 實例,可管理該應用程式的所有預設雙重緩衝。 在大多數情況下,每個應用程式只會有一個應用程式域,因此每個應用程式通常會有一個預設值 BufferedGraphicsContext 。 預設 BufferedGraphicsContext 實例是由 BufferedGraphicsManager 類別管理。 您可以藉由呼叫 Current 來取得預設 BufferedGraphicsContext 實例的參考。 您也可以建立專用 BufferedGraphicsContext 的實例,這樣可以改善以圖形化密集型應用程式的效能。 如需有關如何建立 BufferedGraphicsContext 實例的詳細資訊,請參閱 如何:手動管理已緩衝的圖形

手動顯示已緩衝的圖形

您可以使用類別的實例 BufferedGraphicsContext ,藉由呼叫 BufferedGraphicsContext.Allocate 傳回類別的實例 BufferedGraphics ,藉此建立圖形緩衝區。 BufferedGraphics物件會管理與呈現介面相關聯的記憶體緩衝區,例如表單或控制項。

在具現化之後, BufferedGraphics 類別會管理轉譯成記憶體中的圖形緩衝區。 您可以透過將 Graphics 圖形轉譯成記憶體緩衝區,它會公開 Graphics 直接代表記憶體緩衝區的物件。 您可以像對表示繪圖介面的 Graphics 物件一樣,繪製至這個 Graphics 物件。 所有圖形都繪製到緩衝區之後,您就可以使用 BufferedGraphics.Render ,將緩衝區的內容複寫到螢幕上的繪圖介面。

如需使用類別的詳細資訊,請參閱手動呈現已緩衝BufferedGraphics 圖形。 如需轉譯圖形的詳細資訊,請參閱 Windows Forms 中的圖形和繪圖

另請參閱