2013-03-08 71 views
2

我需要比較兩個緩存的圖像,看它們是否完全相同。簡單地說,如果這等於是行不通的。我目前的方法是Java比較一個BufferedImage到另一個

    { 
       Raster var1 = Img1.getData();  
       Raster var2 = Img2.getData(); 

       int Data1 = (var1.getDataBuffer()).getSize(); 
       int Data2 = (var2.getDataBuffer()).getSize(); 

       if (Data1 == Data2) 
         { 
         return true; 
         } 
       else 
          { 
          return false; 
          } 
       } 

但這並不奏效。還有其他更可靠的方法嗎?

+2

注意:不是這樣的:if(i1 == i2){return true; } else {return false; }'總是這樣做:'return(i1 == i2);'。在這種情況下,這不會解決您的問題,但它的外觀更清晰。 – 2013-03-08 23:28:24

+0

[有沒有簡單的方法來比較BufferedImage實例?](http://stackoverflow.com/questions/11006394/is-there-a-simple-way-to-compare-bufferedimage-instances) – 2015-10-20 18:23:41

回答

16

明顯的解決辦法是用像素來比較,像素,它們是相同的。

boolean bufferedImagesEqual(BufferedImage img1, BufferedImage img2) { 
    if (img1.getWidth() == img2.getWidth() && img1.getHeight() == img2.getHeight()) { 
     for (int x = 0; x < img1.getWidth(); x++) { 
      for (int y = 0; y < img1.getHeight(); y++) { 
       if (img1.getRGB(x, y) != img2.getRGB(x, y)) 
        return false; 
      } 
     } 
    } else { 
     return false; 
    } 
    return true; 
} 
1

是的,假設他們都是在相同的格式閱讀他們作爲字節串和比較字符串。如果一個是JPG而另一個是PNG,那麼這是行不通的。但我認爲平等意味着他們是一樣的。

這裏是一個如何做文件讀取的例子;

http://www.java-examples.com/read-file-byte-array-using-fileinputstream

+0

OP狀態他有'BufferedImage's,他可能自己沒有實際的文件。 – jazzbassrob 2013-03-08 23:32:34

+0

@jazzbassrob如果是這種情況字節已經在內存中,所以它只會使比較更容易。 – evanmcdonnal 2013-03-09 00:23:06

+0

@evanmcdonnal例如?他們甚至還沒有文件格式。 – Cruncher 2015-12-10 16:57:26

0

散列碼呢?

img1.getData().hashCode().equals(img2.getData().hashCode()) 
+1

假設數據是相同的,如果哈希碼相同,則不是保存。您仍然需要比較實際數據 – doerig 2017-01-04 16:15:32

相關問題