【问题标题】:Why is this loop giving me an arrayIndexOutOfBoundsException when scanning an image?为什么在扫描图像时这个循环会给我一个 arrayIndexOutOfBoundsException?
【发布时间】:2017-12-07 00:48:48
【问题描述】:

我目前正在尝试找出一些代码,通过更改每个像素的 rgb 值并将它们放入数组中来使图像水平翻转。我设法让它垂直翻转图像,但我不能让它水平工作。我不知道为什么我不断收到 outOfBoundsException。值得注意的是,此代码适用于方形图像,但不适用于矩形。所以我的代码是

int width = selection.getWidth();
int height = selection.getHeight();
int rgb[][] = new int[height][width];
int rgb2[][] = new int[height][width];

for (int i = 0; i < height; i++) {
    for (int j = 0; j < width; j++) {
        rgb[i][j] = selection.getRGB(i, j);
        rgb2[i][j] = selection.getRGB(i, j);
        System.out.println(j);
    }
}

通过读取小数组的值来调试它并测试这个循环,我无法弄清楚发生了什么。我尝试手动做一些值,它似乎应该逐行扫描,创建一个与像素值具有相同高度和宽度的二维数组。但是,它永远不会脱离内部循环。内部循环中的某些内容超出了范围。

即使在做

for (int i = 0; i < rgb.length; i++) {
        for (int j = 0; j < rgb[0].length; j++) {
            rgb[i][j] = selection.getRGB(i, j);
            rgbTwo[i][j] = selection.getRGB(i, j);

        }
    }

它仍然说坐标超出范围。我不明白为什么这不适用于水平但它适用于垂直,它适用于正方形但不适用于矩形。我的垂直翻转适用于正方形和矩形。

【问题讨论】:

  • 看起来ij 倒退了。 getRGB 不应该是宽度吗?

标签: arrays image-processing multidimensional-array indexoutofboundsexception


【解决方案1】:

getRGB(i, j) 替换为getRGB(j, i)。 x 值位于 y 值之前。 (见here

【讨论】:

  • 非常感谢。我有 3 个不同的循环来解决这个问题,这就是问题所在。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-18
  • 1970-01-01
  • 2013-11-14
相关资源
最近更新 更多