Udostępnij za pośrednictwem


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ż