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;
}
I am using this code to fill the shape with respective colours on click of any portion of image. It is working absolutely fine without leaving white edges at the border, but the issue with this is its working too slow. how can I speed it up?