gpt4 book ai didi

java - BufferedImage 将图像与其自身进行比较会抛出 ArrayOutOfBoundsException

转载 作者:行者123 更新时间:2023-12-01 14:39:02 27 4
gpt4 key购买 nike

我比较了 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 循环 中工作。

最佳答案

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

第二个 for 循环应该是:

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

(w - 1 而不是 w)

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

关于java - BufferedImage 将图像与其自身进行比较会抛出 ArrayOutOfBoundsException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16180399/

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