Procedure: Pixels kopiëren voor het verminderen van flikkering in Windows Forms
Wanneer u een eenvoudige afbeelding animeren, kunnen gebruikers soms flikkerende of andere ongewenste visuele effecten tegenkomen. Een manier om dit probleem te beperken, is door een bitblt-proces in de afbeelding te gebruiken. Bitblt is de 'bitblokoverdracht' van de kleurgegevens van een oorspronkelijke rechthoek van pixels naar een doelrechthoek van pixels.
Met Windows Forms wordt bitblt gerealiseerd met behulp van de CopyFromScreen-methode van de Graphics-klasse. In de parameters van de methode geeft u de bron en het doel op (als punten), de grootte van het gebied dat moet worden gekopieerd en het grafische object dat wordt gebruikt om de nieuwe vorm te tekenen.
In het onderstaande voorbeeld wordt in de gebeurtenis-handler voor Paint een vorm op het formulier getekend. Vervolgens wordt de methode CopyFromScreen gebruikt om de shape te dupliceren.
Notitie
Als u de eigenschap DoubleBuffered van het formulier instelt op true
, wordt grafische code in de gebeurtenis Paint dubbel gebufferd. Hoewel dit geen merkbare prestatieverbeteringen heeft bij het gebruik van de onderstaande code, is het iets waarmee u rekening moet houden bij het werken met complexere code voor grafische manipulatie.
Voorbeeld
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));
}
De code compileren
De bovenstaande code wordt uitgevoerd in de Paint gebeurtenis-handler van het formulier, zodat de afbeeldingen behouden blijven wanneer het formulier opnieuw wordt getekend. Roep daarom geen grafische methoden aan in de Load event-handler, omdat de getekende inhoud niet opnieuw wordt getekend als het formulier wordt vergroot of bedekt door een ander formulier.
Zie ook
.NET Desktop feedback