【发布时间】:2010-05-06 17:43:43
【问题描述】:
我正在使用 Java 中的递归 Flood 填充算法来填充图像的某些区域。 对于非常小的图像,它可以正常工作,但是当图像变大时,JVM 会给我一个堆栈溢出错误。
这就是为什么我必须用我自己的堆栈使用 Flood Fill 重新实现该方法的原因。 (我读到这是在这种情况下最好的方法)
谁能解释一下如何编码? (如果手头没有代码,有算法的伪代码就可以了)
我在网上看了很多,但不是很了解。
编辑:我添加了递归代码
public void floodFill(int x, int y, Color targetColor,Color replacementColor) {
if (img.getRGB(x, y) != targetColor.getRGB()) return;
img.setRGB(x, y, replacementColor.getRGB());
floodFill(x - 1, y, targetColor, replacementColor);
floodFill(x + 1, y, targetColor, replacementColor);
floodFill(x, y - 1, targetColor, replacementColor);
floodFill(x, y + 1, targetColor, replacementColor);
return;
}
谢谢!
【问题讨论】:
-
如果您要展示现有代码(或其高级摘要),有人可能会告诉您如何以非递归方式编写它,如果您是这样的话之后。
-
我建议选择其中一种基于队列的算法,在我看来,它们比基于堆栈的解决方案更容易实现。
-
感谢您的回答,我尝试使用维基百科的解释来实现,但我不知道如何。这就是我在这里提出问题的原因。如果有人能用其他语言向我解释一下,我将不胜感激。
标签: java image-manipulation flood-fill