У меня есть изображение политической карты, и я хотел бы раскрасить страны на нем.Я загружаю изображение в BufferedImage, просматриваю пиксели и окрашиваю белые.Я использую рекурсивный метод для заполнения пробелов, и хотя он не бесконечен (по крайней мере, я так думаю), я получаю StackOverflowError.Также изображение, которое я использую, невелико, оно имеет только 150x160 пикселей.
Вот мой код.Я делаю что-то неправильно?Это даже хороший подход, может быть, я должен попробовать что-то еще?
private final int[] COLORS = {-65536,-15073025,-16726785,-16711757,-16711919,-256,-417268,-455455,-5741663,-14194369,-14730152,-9885900};
private int colorCounter;
private BufferedImage image;
public ImageColoring(BufferedImage image) {
this.image = image;
}
public BufferedImage colorImage(){
for(int i = 0; i<image.getWidth();i++){
for(int j =0;j<image.getHeight();j++){
if(image.getRGB(i,j) == -1){
fill(i,j);
incrementCounter();
}
}
}
return image;
}
private void fill(int x, int y){
if(x<0 || y<0 || x>=image.getWidth() || y>=image.getHeight()) return;
if(image.getRGB(x,y)!=-1) return;
image.setRGB(x,y,COLORS[colorCounter]);
fill(x+1,y);
fill(x-1,y);
fill(x,y+1);
fill(x,y-1);
}
private void incrementCounter(){
if(++colorCounter == COLORS.length) colorCounter = 0;
}
}