Bagikan melalui


Cara: Menyalin Piksel untuk Mengurangi Kedinginan di Formulir Windows

Ketika Anda menganimasikan grafik sederhana, pengguna kadang-kadang dapat menemukan berkedot atau efek visual lain yang tidak diinginkan. Salah satu cara untuk membatasi masalah ini adalah dengan menggunakan proses "bitblt" pada grafik. Bitblt adalah "transfer bit-block" data warna dari persegi panjang asal piksel ke persegi panjang tujuan piksel.

Dengan Formulir Windows, bitblt dicapai menggunakan CopyFromScreen metode Graphics kelas . Dalam parameter metode , Anda menentukan sumber dan tujuan (sebagai titik), ukuran area yang akan disalin, dan objek grafis yang digunakan untuk menggambar bentuk baru.

Dalam contoh di bawah ini, bentuk digambar pada formulir dalam penanganan aktivitasnya Paint . Kemudian, CopyFromScreen metode ini digunakan untuk menduplikasi bentuk.

Catatan

Mengatur properti formulir DoubleBuffered ke true akan membuat kode berbasis grafis dalam Paint peristiwa akan di-buffer ganda. Meskipun ini tidak akan memiliki keuntungan performa yang berbeda saat menggunakan kode di bawah ini, ini adalah sesuatu yang perlu diingat ketika bekerja dengan kode manipulasi grafis yang lebih kompleks.

Contoh

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

Mengompilasi Kode

Kode di atas dijalankan dalam penanganan aktivitas formulir Paint sehingga grafik tetap ada saat formulir digambar ulang. Dengan demikian, jangan memanggil metode terkait grafis di Load penanganan aktivitas, karena konten yang digambar tidak akan digambar ulang jika formulir diubah ukurannya atau dikaburkan oleh formulir lain.

Baca juga