Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
42
Task/Bitmap-Flood-fill/Java/bitmap-flood-fill-1.java
Normal file
42
Task/Bitmap-Flood-fill/Java/bitmap-flood-fill-1.java
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
import java.awt.Color;
|
||||
import java.awt.Point;
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.util.Deque;
|
||||
import java.util.LinkedList;
|
||||
|
||||
public class FloodFill {
|
||||
public void floodFill(BufferedImage image, Point node, Color targetColor, Color replacementColor) {
|
||||
int width = image.getWidth();
|
||||
int height = image.getHeight();
|
||||
int target = targetColor.getRGB();
|
||||
int replacement = replacementColor.getRGB();
|
||||
if (target != replacement) {
|
||||
Deque<Point> queue = new LinkedList<Point>();
|
||||
do {
|
||||
int x = node.x;
|
||||
int y = node.y;
|
||||
while (x > 0 && image.getRGB(x - 1, y) == target) {
|
||||
x--;
|
||||
}
|
||||
boolean spanUp = false;
|
||||
boolean spanDown = false;
|
||||
while (x < width && image.getRGB(x, y) == target) {
|
||||
image.setRGB(x, y, replacement);
|
||||
if (!spanUp && y > 0 && image.getRGB(x, y - 1) == target) {
|
||||
queue.add(new Point(x, y - 1));
|
||||
spanUp = true;
|
||||
} else if (spanUp && y > 0 && image.getRGB(x, y - 1) != target) {
|
||||
spanUp = false;
|
||||
}
|
||||
if (!spanDown && y < height - 1 && image.getRGB(x, y + 1) == target) {
|
||||
queue.add(new Point(x, y + 1));
|
||||
spanDown = true;
|
||||
} else if (spanDown && y < height - 1 && image.getRGB(x, y + 1) != target) {
|
||||
spanDown = false;
|
||||
}
|
||||
x++;
|
||||
}
|
||||
} while ((node = queue.pollFirst()) != null);
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue