import java.awt.image.BufferedImage;
import java.awt.image.DataBufferByte;
import java.io.File;
import java.util.Arrays;
import javax.imageio.ImageIO;
public class ZweiBilderVergleichen {
/**
* @param args
*/
public static void main(String[] args) throws Exception {
// middleA.gif === middleB.gif !== middleC.gif
BufferedImage imageA = ImageIO.read(new File("middleA.gif"));
BufferedImage imageB = ImageIO.read(new File("middleB.gif"));
BufferedImage imageC = ImageIO.read(new File("middleC.gif"));
long time = -System.currentTimeMillis();
int[] pixelOfA = new int[imageA.getWidth() * imageA.getHeight()];
imageA.getData().getPixels(0, 0, 0, 0, pixelOfA);
int[] pixelOfB = new int[imageB.getWidth() * imageB.getHeight()];
imageB.getData().getPixels(0, 0, 0, 0, pixelOfB);
int[] pixelOfC = new int[imageC.getWidth() * imageC.getHeight()];
imageC.getData().getPixels(0, 0, 0, 0, pixelOfC);
System.out.println("Sind A und B gleich? Antwort: " + Arrays.equals(pixelOfA, pixelOfB));
System.out.println("Sind A und C gleich? Antwort: " + Arrays.equals(pixelOfA, pixelOfC));
System.out.println("Sind B und C gleich? Antwort: " + Arrays.equals(pixelOfB, pixelOfC));
// DataBufferInt -> bei BufferedImage.TYPE_INT_RGB -> getData() -> int[]
byte[] dataA = ((DataBufferByte) imageA.getData().getDataBuffer()).getData();
System.out.println(Arrays.hashCode(dataA));
// DataBufferInt -> bei BufferedImage.TYPE_INT_RGB -> getData() -> int[]
byte[] dataB = ((DataBufferByte) imageB.getData().getDataBuffer()).getData();
System.out.println(Arrays.hashCode(dataB));
// DataBufferInt -> bei BufferedImage.TYPE_INT_RGB -> getData() -> int[]
byte[] dataC = ((DataBufferByte) imageC.getData().getDataBuffer()).getData();
System.out.println(Arrays.hashCode(dataC));
System.out.println(time + System.currentTimeMillis() + " ms");
}
}