在Android中实现类似于桶的方法

时间:2011-04-23 17:02:23

标签: java android

我在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);
        }

但是,这会导致应用程序崩溃(强制关闭)。我非常困惑。我对它进行了数十次审查,但仍然看不出是什么导致了这种力量的关闭。

我会很高兴得到任何帮助。 提前谢谢。

1 个答案:

答案 0 :(得分:2)

我认为您的应用因堆栈溢出而崩溃。即使对于30x30图像,此算法也会进行深度为900的递归调用!我不确定Android的堆栈大小有多大,但我很确定你应该重新设计你的算法以避免递归。

更新:根据您的评论我写的都是真的。该算法不起作用。