2013-03-08 3 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); '. Это не решит вашу проблему в этом случае, но это гораздо более чистый вид. –

+0

Возможный дубликат [Есть ли простой способ сравнить экземпляры BufferedImage?] (Http://stackoverflow.com/questions/11006394/is-there-a-simple-way-to-compare-bufferedimage-instances) –

ответ

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', у него могут не быть собственно файлов. – jazzbassrob

+0

@jazzbassrob, если в этом случае байты уже находятся в памяти, поэтому это облегчает сравнение. – evanmcdonnal

+0

@evanmcdonnal например? Они еще не в формате файлов. – Cruncher

0

Как насчет хеш-кодов?

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

Нельзя предположить, что данные одинаковы, если хэш-код тот же. Вы по-прежнему должны сравнивать фактические данные – doerig

Смежные вопросы