Floodfill算法运行缓慢,如何加快此算法?

时间:2017-07-31 06:31:28

标签: android algorithm flood-fill

public void floodFill(Bitmap bitmap, Point point, int i, int j) {
    int k = bitmap.getWidth();
    int l = bitmap.getHeight();
    if (i != j) {
        LinkedList linkedlist = new LinkedList();
        do {
            int i1 = point.x;
            int j1;
            for (j1 = point.y; i1 > 0 && !isBlack(bitmap.getPixel(i1 - 1, j1),j); i1--) {
            }
            boolean flag = false;
            boolean flag1 = false;
            while (i1 < k && !isBlack(bitmap.getPixel(i1, j1), j)) {
                bitmap.setPixel(i1, j1, j); //main

                if (!flag && j1 > 0 && !isBlack(bitmap.getPixel(i1, j1 - 1), j)) {
                    linkedlist.add(new Point(i1, j1 - 1));
                    flag = true;
                } else if (flag && j1 > 0 && isBlack(bitmap.getPixel(i1, j1 - 1), j)) {
                    flag = false;
                }

                if (!flag1 && j1 < l - 1 && !isBlack(bitmap.getPixel(i1, j1 + 1), j)) {
                    linkedlist.add(new Point(i1, j1 + 1));
                    flag1 = true;
                } else if (flag1 && j1 < l - 1 && isBlack(bitmap.getPixel(i1, j1 + 1), j)) {
                    flag1 = false;
                }

                i1++;
            }

            point = (Point) linkedlist.poll();
        } while (point != null);
    }
}

private boolean isBlack(int i, int j) {
    while (Color.red(i) == Color.green(i) && 
            Color.green(i) == Color.blue(i) && 
            Color.red(i) < 100 || i == j) {
        return true;
    }
    return false;
}

我正在使用此代码在点击图像的任何部分时用各自的颜色填充形状。它的工作非常精细而不会在边框处留下白边,但问题是它的工作太慢了。我怎样才能加快速度呢?

1 个答案:

答案 0 :(得分:0)

您可以尝试不同的方法来加快速度:

  1. 更改算法本身
  2. 做一些可能会加速一些事情的优化措施。
  3. 一如既往的优化: 在每次优化尝试之前和之后分析代码,看看你是否获得了任何东西。

    与1相关。
    如果您有大的黑色区域,可以尝试:

    1. 缩小图像尺寸并填充缩小尺寸的图像(但不能填充边框)并将填充大矩形应用于原始图像。

    2. 填写步骤1中填充的一个大矩形旁边的原始图像(以填充边框和所有细节)

    3. 与2相关。

      • 也许您可以在图像周围添加1像素的黑色边框。 这样您就可以删除所有边框检查:

        handleFileFormatException
相关问题