我的洪水填充中的StackOverflow

时间:2013-01-08 10:03:36

标签: c# stack-overflow flood-fill

我目前正在为锻炼创建一个小涂装程序。现在我正在尝试使用油漆桶工具,或者换句话说是填充洪水。有趣的是:如果必须填充的像素数量很少,一切正常。如果填充像素的仇恨数量更高,它会给我一个SO异常。这是我的代码:

private void FloodFill(Bitmap picture, int x, int y)
{
  if (x <= 0 || y <= 0 || x >= DrawingPanel.Width || y >= DrawingPanel.Height)
  {
    return;
  }

  if (picture.GetPixel(x, y) != löschFarbe)
  {
    return;
  }

  if (picture.GetPixel(x, y) == löschFarbe)
  {
    picture.SetPixel(x, y, ColorButton.BackColor);
  }

  FloodFill(picture, x + 1, y);
  FloodFill(picture, x, y + 1);
  FloodFill(picture, x - 1, y);
  FloodFill(picture, x, y - 1);
  FloodFill(picture, x + 1, y + 1);
  FloodFill(picture, x - 1, y + 1);
  FloodFill(picture, x + 1, y - 1);
  FloodFill(picture, x - 1, y - 1);
}

“löschFarbe”是单击的颜色(将被其他颜色删除/覆盖)

发生错误:如果我想填写完整的图片或大空间,我在这里收到错误:

if (picture.GetPixel(x, y) != löschFarbe)
  {
    return;
  }

任何人都知道如何解决这个问题?

BTW这是我的节目图片: Paint

1 个答案:

答案 0 :(得分:2)

即使是中等大小的垃圾填埋也会使你的电话堆栈无法使用。

尝试将此基于递归的方法转换为基于堆栈的方法,如this question