2013-04-23 53 views
0

我比較Java中的BufferedImage對象。我從一組圖像中獲得圖像,並將其與同一組中的所有圖像進行比較。但是,它會導致這種奇怪的錯誤,將圖像與自身進行比較,並且對於其他圖像,一切都很好。下面的代碼:BufferedImage比較圖像與自身拋出ArrayOutOfBoundsException

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

我懷疑這是因爲在所有其他圖像中,你永遠無法執行第二個for循環。

第二個for循環應該是:

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

w - 1而不是w

否則,你就開始你的比較座標(w, 0)和座標將是唯一有效的0w - 1,這就是爲什麼你會得到例外。