gpt4 book ai didi

java - 递归遍历 BufferedImage 时出现 StackOverflowError

转载 作者:太空宇宙 更新时间:2023-11-04 10:24:20 25 4
gpt4 key购买 nike

我有一张政治 map 图像,我想给上面的国家上色。我将图像加载到 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;
}
}

最佳答案

我认为你的解决方案本身听起来不错而且简短,问题是一个 y=160 的图像,可以给你的代码创建一个至少大小为 160 y-1 的堆栈,甚至不考虑其他情况。

我建议跳到堆栈密集程度较低的迭代使用。你可以在彼此下面做 4 个不同的循环(不是嵌套的!)。使其可读性较差,但至少占用空间较少。

关于java - 递归遍历 BufferedImage 时出现 StackOverflowError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50722806/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com