Я пытаюсь использовать класс стека для функции ведра с краской, но при запуске и нажатии на выбранную область в окне изображения, чтобы заполнить ее выбранным цветом, ничего не происходит, и загрузка процессора достигает 100%, и система зависает! вот код, во-первых, код окна изображения для выбора этой функции и вызова функции заполнения после нажатия:
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
if (act == "color")
{
fill(bmp ,e.X, e.Y, bmp.GetPixel(e.X, e.Y));
pictureBox1.Image = bmp;
}
}
============================ и заполните функцию, которая не работает!
private void fill(Bitmap picture, int x, int y, Color bcolor)
{
if (x > 0 && x < picture.Width && y > 0 && y < picture.Height)
{
Point p = new Point(x, y);
Stack<Point> s = new Stack<Point>();
s.Push(p);
while (s.Count > 0)
{
p = s.Pop();
Color currentcolor = picture.GetPixel(p.X, p.Y);
if (currentcolor == bcolor)
{
//this.Refresh();
picture.SetPixel(p.X, p.Y, currentcolor);
s.Push(new Point(p.X - 1, p.Y));
s.Push(new Point(p.X + 1, p.Y));
s.Push(new Point(p.X, p.Y - 1));
s.Push(new Point(p.X, p.Y + 1));
}
}
}
}
любая идея исправить эту проблему? Спасибо
--- На самом деле я удалил код "this.Refresh()", но результат тот же, ничего не изменилось! Итак, какие-либо предложения по исправлению или улучшению кода для ведра с краской?
Push
инг иPop
пинг, поэтому я подозреваю, чтоs.Count > 0
в порядке. - person Enigmativity   schedule 19.01.2016this.Refresh()
? - person Enigmativity   schedule 19.01.2016