Nasıl yapılır: Windows Forms’da Titreşimi Azaltmak için Piksel Kopyalama

Basit bir grafa animasyonu sızan kullanıcılar bazen titreşim veya diğer istenmeyen görsel etkilerle karşılaşabilirsiniz. Bu sorunu sınırlamanın bir yolu grafikte "bitblt" işlemi kullanmaktır. Bitblt, piksellerin kaynak dikdörtgeni olan renk verilerinden hedef dikdörtgene piksellerin "bit blok aktarımı"dır.

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

Aşağıdaki örnekte, form üzerinde olay işleyicisinde bir Paint şekil çizilir. Ardından CopyFromScreen yöntemi, şekli yinelemek için kullanılır.

Not

Formun özelliğini olarak DoubleBufferedtrue ayarlama, olayda grafik tabanlı Paint kodun iki kez arabelleğe almasını sağlar. Bu, aşağıdaki kodu kullanırken herhangi bir ayırt edilemez performans kazancı elde etmekle birlikte, daha karmaşık grafik işleme koduyla çalışırken göz altında tutmanız 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ırarak form yeniden çiziken grafiklerin Paint kalıcı olur. Bu nedenle, olay işleyicisinde grafikle ilgili yöntemleri çağırma, çünkü form başka bir form tarafından yeniden boyutlandırılırsa veya bu formla ilgili olarak çizilen içerik yeniden Load çizlanmaz.

Ayrıca bkz.