Show / Hide Table of Contents

Практическое руководство. Копирование пикселов для уменьшения эффекта дрожания изображения в Windows Forms

При анимации простой график, могут появиться мерцание или другие нежелательные визуальные эффекты. Чтобы ограничить эту проблему рекомендуется использовать процесс «bitblt» на рисунок. BitBlt является «битов перемещение» данных о цвете из исходного прямоугольника из пикселей в конечный прямоугольник пикселей.

С помощью Windows Forms, bitblt осуществляется с помощью CopyFromScreen метод Graphics класса. В параметры метода указать источник и назначения (в виде точек), размер области для копирования и объект graphics, используемый для рисования новой фигуры.

В приведенном ниже примере фигуры рисуется в форме в его Paint обработчик событий. Затем CopyFromScreen метод используется для копирования фигуры.

Note

Свойства формы DoubleBuffered свойства true будет выполнять код с графическим интерфейсом в Paint событие быть двойной буферизацией. Хотя это не приведет к любой ощутимого производительность при использовании приведенный ниже код, то это следует учитывать при работе с кодом более сложных манипуляций с графикой.

Пример

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

Компиляция кода

Приведенный выше код выполняется в форме Paint обработчик событий, чтобы изображение остается при перерисовке формы. Таким образом, не следует вызывать методы, связанные с графики в Load обработчик событий, так как не будет перерисовываться будет Если скрыта другой формой или изменении размера формы.

См. также

  • CopyPixelOperation
  • Graphics.FillRectangle
  • Control.OnPaint
  • Объекты Graphics и Drawing в Windows Forms
  • Рисование линий и фигур с помощью пера
Back to top Неофициальная документация по .NET на русском языке. Лицензия: CC-BY 4.0. Основано на документации по .NET с Microsoft Docs
Generated by DocFX