-3

我已经创建了一个封闭轮廓,其中包含一个我想用颜色填充的点列表。我使用了边界填充递归算法,但没有运气数组索引超出范围,因为我无法开发 if 条件,因为里面的颜色闭合轮廓和轮廓外的颜色相同。我应该使用什么方法来让所需的轮廓被特定颜色填充。这是我尝试过的代码

public class BoundaryFillAlgorithm {
public static BufferedImage toFill = MemoryPanel.Crect;
static Graphics g1 = toFill.getGraphics();
static int seedx = toFill.getWidth()/2;
static int seedy = toFill.getHeight()/2;

public static void BoundaryFill(int x,int y){

    Color old = new Color(toFill.getRGB(x, y));     
    g1.setColor(Color.BLACK);
    if(old!=Color.BLACK){       
    g1.fillOval(x, y, 1, 1);
    BoundaryFill(x+1,y);
    BoundaryFill(x,y+1);
    BoundaryFill(x-1,y);
    BoundaryFill(x,y-1);
    }
}

这是图像

我的形象:矩形

这是方法调用

BoundaryFillAlgorithm.BoundaryFill(BoundaryFillAlgorithm.seedx,BoundaryFillAlgorithm.seedy);
4

3 回答 3

0
g.setColor(Color.red); // Set color to red
g.fillRect(600, 400, 100, 100);// a filled-in RED rectangle
于 2017-03-19T16:57:12.623 回答
0

为什么要重新发明轮子?
Graphics2D已经有一个方法fill(Shape)。有许多实现Shape接口的类,尤其是Polygon,您可以重用它们。

于 2017-03-20T11:31:12.873 回答
0

最后更正了我的代码,这是更正后的代码:

import java.awt.Graphics;
import java.awt.image.BufferedImage;

public class BoundaryFillAlgorithm {
public static BufferedImage toFill = MemoryPanel.Crect;
Graphics g1 = toFill.getGraphics();     

public BoundaryFillAlgorithm(BufferedImage toFill){
    int x = toFill.getWidth()/2-10;
    int y = toFill.getHeight()/2;
    int old = toFill.getRGB(x, y);
    this.toFill = toFill;
    fill(x,y,old);  
}

private void fill(int x,int y,int old) {
    if(x<=0) return;
    if(y<=0) return;
    if(x>=toFill.getWidth()) return;
    if(y>=toFill.getHeight())return;

    if(toFill.getRGB(x, y)!=old)return;
    toFill.setRGB(x, y, 0xFFFF0000);
    fill(x+1,y,old);
    fill(x,y+1,old);
    fill(x-1,y,old);
    fill(x,y-1,old);
    fill(x+1,y-1,old);
    fill(x+1,y+1,old);
    fill(x-1,y-1,old);
    fill(x+1,y-1,old);

}

}

于 2017-03-21T18:23:01.373 回答