我制作的程序需要每隔几个像素完全分析图像。此循环适用于具有相同高度和宽度的图片(它们不会给我带来问题,因为它们会生成完美的双色阵列)。宽度和高度不同时会出现问题。
/** precondition
* img > 100x100px
*
*/
private Color[][] matrizColours(File img) {
int size = 10; //spacing between coordinate and coordinate
int cord_x = size / 2, cord_y = size / 2; //coordinate
BufferedImage image = null;
try {
image = ImageIO.read(img);
} catch (Exception e) {
System.out.println(e);
}
Color[][] a = new Color[image.getWidth() / size][image.getHeight() / size];
int x = 0; //coordinate or array WIDTH
int y = 0; //coordinate of array HEIGHT
for (x = 0; cord_x <= image.getWidth(); x++) {
for (y = 0; cord_y <= image.getHeight(); y++) {
Color c = new Color(image.getRGB(cord_x, cord_y), true);
a[x][y] = c;
cord_y += size;
}
cord_x += size;
cord_y = 5;
}
return a;
}
如果宽度和高度不同,如何填充双数组? (我想要的是一个不同长度的双数组)
我希望循环继续运行,并在宽度和高度不同时继续填充数组。
答案 0 :(得分:1)
我真的不明白,为什么你需要这样的代码...
但我真的不认为你的问题与不同的宽度和高度有关。
想象一下,你的图片的宽度为19像素。你的大小是10.如果你除了19/10,这就是1,9。因此,您的Color Array a的长度为1。
你的cord_x以5开头。第一次迭代后,cord_x将是15,仍然小于19.因此for循环将迭代两次,但你的数组只能容纳1 x-Coordinate。所以你会得到一个IndexOutOfBoundsException - 错误。
只需改进数组的大小,不应抛出异常。 (我想你的宽度应该是(int)(image.getWidth())/(1.0 * size)+0.5))