2016-05-07 9 views
0

Wenn ich, wenn zwei Bufferedimages gleich überprüfen möchten, kann ich sie einfach pixel vergleichen diese zwei Schleifen mit:Java: Vergleich zweier Bufferedimages mit Schleifen

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; 
} 

Ich habe dies aus: Here

Aber ich will auch, dass dies funktioniert, wenn img2 von 90 or 270 Grad gedreht wird. Ich versuchte switching x und y, mit Kombinationen wie img2.getWidth()-x in der zweiten .getRGB(), aber nichts scheint zu funktionieren.

Ich weiß, es ist vielleicht nicht das schwerste Problem der Welt, aber ich kann es nicht herausfinden.

Jede Hilfe würde sehr geschätzt werden.

Antwort

0

Ich denke, es unvermeidbar ist, die "2-loops" 3 mal auszuführen: eines für 0-Grad-Drehung, die zweite 90 und die dritte 270:

Für 90 Grad: (behaupten img1.getWidth() == img2.getHeight() & & img1.getHeight() == img2.getWidth())

for (int x = 0; x < img1.getWidth(); x++) { 
    for (int y = 0; y < img1.getHeight(); y++) { 
     if (img1.getRGB(x, y) != img2.getRGB(img1.getHeight() - 1 - y, x)) 
      return false; 
    } 
} 

Für 270 Grad: (behaupten img1.getWidth() == img2.getHeight() & & img1 .getHeight() == img2.getWidth())

for (int x = 0; x < img1.getWidth(); x++) { 
    for (int y = 0; y < img1.getHeight(); y++) { 
     if (img1.getRGB(x, y) != img2.getRGB(y, img1.getWidth() - 1 - x)) 
      return false; 
    } 
} 
+0

Hey, danke, aber ich bekomme Out-of-Bounds Fehler in den 90-Grad-Schleifen und falsche Ergebnisse in den 270-Loops. Fehle ich etwas? – InJustice47

+0

Nein, ich bin es, der etwas verpasst hat. Ich weiß, was das Problem ist, ich werde es jetzt beheben – aviad

+0

Hey, entschuldige, dass ich dich wieder belästige, aber hast du es schon repariert? – InJustice47

Verwandte Themen