Porady: kopiowanie pikseli w celi zmniejszenia migotania w formularzach systemu Windows
W przypadku animowania prostej grafiki użytkownicy mogą czasami napotykać migotanie lub inne niepożądane efekty wizualne. Jednym ze sposobów ograniczenia tego problemu jest użycie procesu "bitblt" na grafice. Bitblt to "transfer bloków bitowych" danych kolorów z prostokąta pochodzenia pikseli do docelowego prostokąta pikseli.
W przypadku formularzy systemu Windows bitblt jest osiągany przy użyciu CopyFromScreen metody Graphics klasy . W parametrach metody należy określić źródło i miejsce docelowe (jako punkty), rozmiar obszaru do skopiowania oraz obiekt graficzny używany do rysowania nowego kształtu.
W poniższym przykładzie kształt jest rysowany na formularzu w procedurze Paint obsługi zdarzeń. CopyFromScreen Następnie metoda jest używana do duplikowania kształtu.
Uwaga
Ustawienie właściwości formularza DoubleBuffered na true
wartość spowoduje, że kod oparty na grafice w Paint zdarzeniu będzie buforowany dwukrotnie. Chociaż nie będzie to miało żadnych zauważalnych wzrostów wydajności podczas korzystania z poniższego kodu, podczas pracy z bardziej złożonym kodem manipulowania grafiką należy pamiętać.
Przykład
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));
}
Kompilowanie kodu
Powyższy kod jest uruchamiany w procedurze obsługi zdarzeń formularza Paint , tak aby grafika utrzymywała się podczas ponownego rysowania formularza. W związku z tym nie należy wywoływać metod związanych z grafiką w Load procedurze obsługi zdarzeń, ponieważ narysowana zawartość nie zostanie ponownie wyrysowana, jeśli rozmiar formularza zostanie zmieniony lub zasłonięty przez inny formularz.
Zobacz też
.NET Desktop feedback