Вывод изображений и двойная буферизация

Способ уменьшения мерцания – использовать двойную буферизацию вывода – когда изображение сначала готовится "за кадром", а затем переносится на экран, устраняя мерцание при анимации. Рассмотрим пример вывода с двойной буферизацией:

using System.Threading; //добавляем для использования задержки

 

private void Form1_Paint(Object sender, PaintEventArgs e) {

//Graphics g = e.Graphics;

Graphics displayGraphics = e.Graphics;

int k=0;

while(k <500) {

Pen p = new Pen(Color.Red);

SolidBrush b= new SolidBrush(Color.Yellow);

SolidBrush b1= new SolidBrush(Color.Green);

//создаем объект - изображение, которое будет включать все, что нарисовано на форме

Image i = new Bitmap(Control.Height,Control.Width);

Graphics g = Graphics.FromImage(i);

g.Clear(Color.Aqua);

Thread.Sleep(200); //задержка на 300 миллисекунд

g.FillEllipse(b,k,150,30,45);

g.FillEllipse(b1,k+5,165,5,5);

g.FillEllipse(b1,k+20,165,5,5);

g.DrawArc(p,k+5,175,20,10,0,180);

g.FillRectangle(b1,0,190,500,100);

k=k+10;

//выводим на форму, созданное изображение

displayGraphics.DrawImage(i,ClientRectangle);

}

}

Для сравнения закомментируйте строки выделенные красным цветом и снимите комментарий со строки: Graphics g = e.Graphics;

Процесс анимации можно выполнять по таймеру.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: