Gör så här: Kopiera pixlar för att minska flimmer i Windows-formulär
När du animerar en enkel bild kan användare ibland stöta på flimmer eller andra oönskade visuella effekter. Ett sätt att begränsa det här problemet är att använda en "bitblt"-process på bilden. Bitblt är "bitblocksöverföring" av färgdata från en ursprungsrektangel med pixlar till en målrektangel med pixlar.
Med Windows Forms utförs bitblt med hjälp av CopyFromScreen-metoden för klassen Graphics. I parametrarna för metoden anger du källan och målet (som punkter), storleken på det område som ska kopieras och grafikobjektet som används för att rita den nya formen.
I exemplet nedan ritas en form på formuläret i dess Paint händelsehanterare. Sedan används metoden CopyFromScreen för att duplicera formen.
Obs
Om formulärets DoubleBuffered egenskap anges till true
blir grafikbaserad kod i händelsen Paint dubbelbuffertad. Även om detta inte kommer att ha några märkbara prestandavinster när du använder koden nedan, är det något att tänka på när du arbetar med mer komplex grafikmanipuleringskod.
Exempel
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));
}
Kompilera koden
Koden ovan körs i formulärets Paint händelsehanterare så att grafiken bevaras när formuläret ritas om. Anropa därför inte grafikrelaterade metoder i händelsehanteraren Load eftersom det ritade innehållet inte ritas om om formuläret ändras eller döljs av ett annat formulär.
Se även
.NET Desktop feedback