将图像与自身进行比较的BufferedImage会抛出ArrayOutOfBoundsException

时间:2013-04-23 22:44:33

标签: java bufferedimage

我在Java中比较BufferedImage对象。我从一组中获取了图像,并将其与同一组中的所有图像进行比较。但是,它会导致这种奇怪的错误,将图像与自身进行比较,一切都适用于其他图像。这是代码:

private boolean diagonalCompare() {
    for(int i = 0, j = 0; i < w && j < h; i++, j++) {
        if(bimg1.getRGB(i, j) != bimg2.getRGB(i, j)) {
            return false;
        }
    }
    for(int i = w, j = 0; i > -1 && j < h; i--, j++) {
//-----------THIS IS THE LINE CAUSES THE ERROR---------------------------------\\
        if(bimg1.getRGB(i, j) != bimg2.getRGB(i, j)) {
            return false;
        }
    }
    return true;
}

这是堆栈跟踪:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Coordinate out of bounds!
at sun.awt.image.ByteInterleavedRaster.getDataElements(Unknown Source)
at java.awt.image.BufferedImage.getRGB(Unknown Source)
at com.oy.duplicator.SimpleComparator.diagonalCompare(SimpleComparator.java:144)
at com.oy.duplicator.SimpleComparator.compareBufferedImage(SimpleComparator.java:78)
at com.oy.duplicator.SimpleComparator.compare(SimpleComparator.java:44)
at com.oy.duplicator.Main.main(Main.java:78)

ArrayOutOfBoundsException?这是为什么?也许这是由阅读相同文件引起的,但它适用于第一个for-loop

1 个答案:

答案 0 :(得分:1)

我怀疑这是因为在你所有其他图像中你永远不会执行第二个for循环。

第二个for循环应该是:

for(int i = w - 1, j = 0; i > -1 && j < h; i--, j++) {

w - 1代替w

否则,您开始与坐标(w, 0)进行比较,因为坐标仅在0w - 1之间有效,这就是您获得异常的原因。