2013-03-08 84 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

相关问题