为图像的宽度和高度填充不同长度的双数组

时间:2015-08-02 05:17:44

标签: java arrays loops

我制作的程序需要每隔几个像素完全分析图像。此循环适用于具有相同高度和宽度的图片(它们不会给我带来问题,因为它们会生成完美的双色阵列)。宽度和高度不同时会出现问题。

/** 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;
}

如果宽度和高度不同,如何填充双数组? (我想要的是一个不同长度的双数组)

我希望循环继续运行,并在宽度和高度不同时继续填充数组。

1 个答案:

答案 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))