Nasıl yapılır: Windows Formlarında Titreşimi Azaltmak için Piksel Kopyalama

Basit bir grafiğe animasyon eklediğinizde, kullanıcılar bazen titreme veya diğer istenmeyen görsel efektlerle karşılaşabilir. Bu sorunu sınırlamanın bir yolu, grafikte "bitblt" işlemi kullanmaktır. Bitblt, piksellerin kaynak dikdörtgeninden piksellerin hedef dikdörtgenine renk verilerinin "bit bloğu aktarımıdır".

Windows Forms ile bitblt, sınıfının yöntemi Graphics kullanılarak CopyFromScreen gerçekleştirilir. yönteminin parametrelerinde kaynak ve hedefi (nokta olarak), kopyalanacak alanın boyutunu ve yeni şekli çizmek için kullanılan grafik nesnesini belirtirsiniz.

Aşağıdaki örnekte, bir şekil, olay işleyicisindeki Paint forma çizilir. Ardından, CopyFromScreen şekli çoğaltmak için yöntemi kullanılır.

Dekont

Formun DoubleBuffered özelliğini true olarak ayarlamak, olaydaki grafik tabanlı kodun Paint çift arabelleğe alınmasına neden olur. Bu, aşağıdaki kodu kullanırken herhangi bir ayrımcı performans kazancına sahip olmayacak olsa da, daha karmaşık grafik işleme koduyla çalışırken göz önünde bulundurulması gereken bir şeydir.

Örnek

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));  
}  

Kod Derleniyor

Yukarıdaki kod formun olay işleyicisinde çalıştırılır, böylece form Paint yeniden çizildiğinde grafiklerin kalıcı olması sağlanır. Bu nedenle, grafikle ilgili yöntemleri olay işleyicisinde Load çağırmayın, çünkü form yeniden boyutlandırılırsa veya başka bir form tarafından gizlenirse çizilen içerik yeniden çizilmeyecektir.

Ayrıca bkz.