Share via


如何:複製像素以降低 Windows Form 的閃動

當您以動畫顯示簡單的圖形時,使用者有時會遇到閃爍或其他不想要的視覺效果。 限制此問題的其中一個方法是在圖形上使用「bitblt」 程式。 Bitblt 是從圖元原點矩形到圖元目的地矩形的色彩資料的「位區塊傳輸」。

使用 Windows Forms 時,bitblt 是使用 CopyFromScreen 類別的 Graphics 方法來完成。 在 方法的參數中,您可以指定來源和目的地(以點為單位)、要複製的區域大小,以及用來繪製新圖形的繪圖物件。

在下列範例中,圖形會繪製在其事件處理常式中的 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 呼叫圖形相關方法,因為如果表單調整大小或被另一個表單遮蔽,則不會重新繪製內容。

另請參閱