我创建了一个用于在 Android 中绘图的应用程序。 我想要一个类似于 Microsoft Paint 的水桶工具的工具 - 该工具将用所选颜色填充封闭区域。所以点击后,我写道:
boolean[][] didVisit = new boolean[getWidth()][getHeight()];
visit ((int)event.getX(), (int)event.getY(), didVisit, mBitmap.getPixel((int)event.getX(), (int)event.getY()));
访问方式为:
private void visit (int x, int y, boolean[][] didVisit, int color)
{
if ( x < 0 || x >= didVisit.length || y < 0 || y >= didVisit[0].length )
{
return;
}
if ( mBitmap.getPixel(x,y) != color )
return;
if ( didVisit[x][y] )
return;
didVisit[x][y] = true;
mBitmap.setPixel(x, y, p.getColor());
visit(x-1,y,didVisit,color);
visit(x,y+1,didVisit,color);
visit(x+1,y,didVisit,color);
visit(x,y-1,didVisit,color);
}
但是,这会导致应用程序崩溃(强制关闭)。我很困惑。我检查了几十遍,还是看不出是什么原因导致强制关闭的。
我很乐意提供任何帮助。 提前致谢。
最佳答案
我认为您的应用程序因堆栈溢出而崩溃。即使对于 30x30 图像,该算法也会进行深度为 900 的递归调用!我不确定 Android 的堆栈大小有多大,但我很确定您应该重新设计算法以避免递归。
更新:根据您的评论,我写的所有内容都是真实的。这个算法行不通。
关于java - 在Android中实现类似bucket的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5765619/