雙重緩衝的圖形

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

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

預設雙重緩衝

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

手動管理已緩衝的圖形

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

手動顯示已緩衝的圖形

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

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

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

另請參閱