2

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

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

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

顺便说一句,这是我的程序的图片: 画

4

1 回答 1

2

即使是中等大小的 Floodfill 也会炸毁你的调用堆栈。

尝试将此基于递归的方法转换为基于堆栈的方法,如本问题所示

于 2013-01-08T10:07:37.993 回答