如何:複製像素以降低 Windows Form 的閃動
當您以動畫顯示簡單的圖形時,用戶有時會遇到閃爍或其他不想要的視覺效果。 限制此問題的其中一個方法是在圖形上使用「bitblt」程式。 Bitblt 是從像素原始矩形到像素目的地矩形的色彩資料的「位元區塊傳輸」。
使用 Windows Forms 時,bitblt 是使用 Graphics 類別的 CopyFromScreen 方法來完成。 在該方法的參數中,您可以指定來源和目的地 (以點為單位)、要複製的區域大小,以及用來繪製新圖形的圖形物件。
在下列範例中,圖形會繪製在其 Paint 事件處理常式中的表單上。 然後,CopyFromScreen 方法會用來複製圖形。
注意
將表單的 DoubleBuffered 屬性設定為 true
會使 Paint 事件中的圖形型程式碼進行雙緩衝處理。 雖然在使用下列程式碼時,這樣不會有任何明顯的效能提升,但在使用更複雜的圖形操作程式碼時,請記住這點。
範例
Private Sub Form1_Paint(ByVal sender As Object, ByVal e As _
System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
' Draw a circle with a bar on top.
e.Graphics.FillEllipse(Brushes.DarkBlue, New Rectangle _
(10, 10, 60, 60))
e.Graphics.FillRectangle(Brushes.Khaki, New Rectangle _
(20, 30, 60, 10))
' Copy the graphic to a new location.
e.Graphics.CopyFromScreen(New Point(10, 10), New Point _
(100, 100), New Size(70, 70))
End Sub
private void Form1_Paint(System.Object sender,
System.Windows.Forms.PaintEventArgs e)
{
e.Graphics.FillEllipse(Brushes.DarkBlue, new
Rectangle(10,10,60,60));
e.Graphics.FillRectangle(Brushes.Khaki, new
Rectangle(20,30,60,10));
e.Graphics.CopyFromScreen(new Point(10, 10), new Point(100, 100),
new Size(70, 70));
}
編譯程式碼
上述程式碼會在表單的 Paint 事件處理常式中執行,以便在重新繪製表單時保存圖形。 因此,請勿在 Load 事件處理常式中呼叫圖形相關方法,因為如果表單已重設大小或被另一個表單遮蔽,則不會重新繪製內容。