首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >填充算法工作慢,怎么才能加速这个算法呢?

填充算法工作慢,怎么才能加速这个算法呢?
EN

Stack Overflow用户
提问于 2017-07-31 06:31:27
回答 1查看 1K关注 0票数 0
代码语言:javascript
复制
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;
}

我正在使用此代码填充形状与各自的颜色点击任何部分的图像。它在没有留下白色边框的情况下工作非常好,但问题是它的工作太慢了。我怎样才能加快速度?

EN

回答 1

Stack Overflow用户

发布于 2017-07-31 07:27:52

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

  1. 更改算法本身
  2. 做一些可能会加速一些事情的小动作。

与优化一样:在每次优化之前和之后对代码进行配置,以查看您是否获得了什么。

相关的1.

如果你有大片的黑色区域,你可以试试:

  1. 缩小图像,填充缩小的图像(但不是边框),并将填充的大矩形应用于原始图像。
  2. 在步骤1中填充的一个大矩形旁边填写原始图像(以边框和所有细节为基础)

相关的2.

  • 也许你可以在你的图像周围添加一个1像素的黑色边框。这样,您就可以删除所有的边界检查: 公共floodFill(位图位图,点点,int i,int j) { int k= bitmap.getWidth();int l= bitmap.getHeight();if (i = j) { linkedlist LinkedList =新LinkedList();do { int i1 = point t.x;int j1;for (j1 = Point t.y;i1 >0& !isBlack(bitmap.getPixel(i1 - 1,j1),j);{}布尔标志=假;布尔flag1 =假;而(i1
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45408861

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档