Динамическое рисование и отображение пикселя за пикселем с некоторой задержкой - PullRequest
0 голосов
/ 15 декабря 2018

Предположим, мне нужно рисовать пиксель за пикселем с некоторой задержкой, чтобы точки отображались одна за другой.Я написал следующий код:

            for (int i = 0; i < 300; ++i)
        {
            Random random = new Random();
            Point point = new Point(random.Next(0, bmp.Width), random.Next(0, bmp.Height));
            bmp.SetPixel(point.X, point.Y, Color.Black);
            pictureBox1.Image = bmp;
            Thread.Sleep(10);
        }

Но это не работает!Программа зависает до 300 точек на растровом изображении, а затем отображает их все одновременно на картинке Box

Что я делаю не так?Я ничего не нашел об этом.

Буду благодарен за любой совет, почему это происходит и как это исправить.Извините за мой плохой английский.

1 Ответ

0 голосов
/ 15 декабря 2018

Мне удалось сделать рабочее решение для вас:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private Bitmap bmp = new Bitmap(100,100);

    private void Form1_Load(object sender, EventArgs e)
    {
        pictureBox1.Image = bmp; //only assign it once!
    }

    private async void button1_Click(object sender, EventArgs e)
    { // method that starts the picturebox filling. You can declare it anywhere else.
        for (int i = 0; i < 300; ++i)
        {
            Random random = new Random();
            Point point = new Point(random.Next(0, bmp.Width), random.Next(0, bmp.Height));
            bmp.SetPixel(point.X, point.Y, Color.Black); //we are updating the reference of 'bmp', which the pictureBox already contains
            pictureBox1.Refresh(); //force the picturebox to redraw its bitmap
            await Task.Delay(100); // async delay, to prevent the UI from locking
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...