Vorgehensweise: Kopieren von Pixeln zum Vermindern des Flackerns in Windows Forms
Wenn Sie eine einfache Grafik animieren, können Benutzer manchmal auf Flimmern oder andere unerwünschte visuelle Effekte stoßen. Eine Möglichkeit, dieses Problem einzuschränken, besteht darin, einen „bitblt“-Prozess auf die Grafik anzuwenden. Bitblt ist die „Bitblockübertragung“ der Farbdaten aus einem Ursprungsrechteck von Pixeln in ein Zielrechteck von Pixeln.
Bei Windows Forms wird bitblt mithilfe der CopyFromScreen-Methode der Graphics-Klasse erzielt. In den Parametern der Methode geben Sie die Quelle und das Ziel (als Punkte), die Größe des zu kopierenden Bereichs und das Grafikobjekt an, das zum Zeichnen der neuen Form verwendet wird.
Im folgenden Beispiel wird eine Form im Formular in seinem Paint-Ereignishandler gezeichnet. Anschließend wird die CopyFromScreen-Methode verwendet, um die Form zu duplizieren.
Hinweis
Wenn Sie die DoubleBuffered-Eigenschaft des Formulars auf true
festlegen, wird grafikbasierter Code im Paint-Ereignis doppelt gepuffert. Dies hat zwar keine erkennbaren Leistungsvorteile bei der Verwendung des folgenden Codes, aber es ist etwas, das sie beim Arbeiten mit komplexeren Grafikbearbeitungscode im Hintergkopf behalten sollten.
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 also keine grafikbezogenen Methoden im Load-Ereignishandler auf, da der gezeichnete Inhalt nicht neu gezeichnet wird, wenn die Größe des Formular geändert oder es durch ein anderes Formular verdeckt wird.
Weitere Informationen
.NET Desktop feedback