Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我的洪水泛滥_C#_Stack Overflow_Flood Fill - Fatal编程技术网

C# 我的洪水泛滥

C# 我的洪水泛滥,c#,stack-overflow,flood-fill,C#,Stack Overflow,Flood Fill,我目前正在创建一个用于练习的小绘画程序。现在我正在尝试做油漆桶工具,或者换句话说,一个洪水填充。有趣的是:如果必须填充的像素数很小,那么一切都正常。若要填充的像素数更高,那个么我就有一个例外。这是我的密码: private void FloodFill(Bitmap picture, int x, int y) { if (x <= 0 || y <= 0 || x >= DrawingPanel.Width || y >= DrawingPanel.Height)

我目前正在创建一个用于练习的小绘画程序。现在我正在尝试做油漆桶工具,或者换句话说,一个洪水填充。有趣的是:如果必须填充的像素数很小,那么一切都正常。若要填充的像素数更高,那个么我就有一个例外。这是我的密码:

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);
}
有人知道我怎么解决这个问题吗

顺便说一句,这是我节目的图片:

即使是中等大小的洪水也会吹坏你的呼叫堆栈


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

由于
FloodFill
调用自身的次数过多,因此出现堆栈溢出异常。考虑你的图像中有多少像素,然后考虑当你点击图像的中心时会调用多少次<代码> FloodFill <代码>。它调用
FloodFill
,然后在第一个相邻像素上调用
FloodFill
,而该像素会一次又一次地执行相同的操作。由于
GetPixel
方法没有足够的堆栈空间来正常工作,因此在其他地方会出现错误。你需要重新思考如何使用循环而不是递归进行洪水填充。天啊,8点指数,1-8-64-512-4096-32768,难怪你会出现堆栈溢出!那只是到了60度的深度
if (picture.GetPixel(x, y) != löschFarbe)
  {
    return;
  }