我在Java中制作非递归洪水填充方法,它使用点击像素(x,y)的坐标和颜色代码作为输入。img 是缓冲图像。
代码有效,但仅适用于大而简单的形状(如正方形),有时甚至无法填充它们。如何纠正它始终以任何形状工作?
public void floodFillNoRecursion (int x, int y, int color) {
if (img.getRGB(x, y)!=Color.BLACK.getRGB()) {
return;
} else {
int x1=x;
int y1=y;
img.setRGB(x, y, color);
for (int i=0;i<img.getHeight();i++) {
for (int j=0;j<img.getWidth();j++){
if (img.getRGB(x1+1, y1)==Color.BLACK.getRGB()){
x1++;
img.setRGB(x1, y1, color);
}
else if (img.getRGB(x1, y1+1)==Color.BLACK.getRGB()){
y1++;
img.setRGB(x1, y1, color);
}
else if (img.getRGB(x1, y1-1)==Color.BLACK.getRGB()){
y1--;
img.setRGB(x1, y1, color);
}
else if (img.getRGB(x1-1, y1)==Color.BLACK.getRGB()){
x1--;
img.setRGB(x1, y1, color);
}
}}
}}