共用方式為


雙重緩衝的圖形

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

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

預設雙重緩衝

在應用程式中使用雙重緩衝的最簡單方式,是使用 .NET Framework 所提供之表單和控制項的預設雙重緩衝。 您可以將 DoubleBuffered 屬性設定為 true 或使用 SetStyle 方法,針對 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 中的圖形和繪圖

另請參閱