Freigeben über


Gewusst wie: Kopieren von Pixeln zum Vermindern des Flackerns in Windows Forms

Wenn Sie eine einfache Grafik animieren, können manchmal Flackern oder andere unerwünschte visuelle Effekte auftreten. Eine Möglichkeit, dieses Problem möglichst in Grenzen zu halten, besteht darin, in der Grafik einen "bitblt"-Prozess zu verwenden. Unter Bitblt versteht man den "Bitblocktransfer" der Farbdaten von einem ursprünglichen Rechteck aus Pixel zu einem Zielrechteck aus Pixel.

Mit Windows Forms erfolgt der Bitblocktransfer mithilfe der CopyFromScreen-Methode der Graphics-Klasse. In den Parametern der Methode geben Sie die Quelle und das Ziel (als Punkte), die Größe des zu kopierenden Bereichs und das zum Zeichnen der neuen Form verwendete Grafikobjekt an.

Im Beispiel unten wird im Paint-Ereignishandler eine Form auf dem Formular gezeichnet. Anschließend wird die Form mithilfe der CopyFromScreen-Methode dupliziert.

Tipp

Durch Festlegen der DoubleBuffered-Eigenschaft des Formulars auf true wird grafikbasierter Code im Paint-Ereignis doppelt gepuffert. Zwar führt dies bei Verwendung des nachstehenden Codes zu keinen nennenswerten Leistungsverbesserungen, sollte jedoch im Hinblick auf komplexeren Code zur Grafikbearbeitung beachtet werden.

Beispiel

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));
}

Kompilieren des Codes

Der obige Code wird im Paint-Ereignishandler des Formulars ausgeführt, sodass die Grafiken erhalten bleiben, wenn das Formular neu gezeichnet wird. Rufen Sie im Load-Ereignishandler keine auf Grafiken bezogenen Methoden auf, da der gezeichnete Inhalt nicht neu gezeichnet wird, wenn sich die Größe des Formulars ändert oder es von einem anderen Formular verdeckt wird.

Siehe auch

Referenz

CopyPixelOperation

Graphics.FillRectangle

Control.OnPaint

Weitere Ressourcen

Grafik und Zeichnen in Windows Forms

Verwenden eines Stiftes zum Zeichnen von Linien und Formen