BufferedImages vergleichen

Nasdneb

Mitglied
Servus Programmierer!

In meiner Software erzeuge ich BufferedImages aus 4 Teil-BufferedImages und speichere diese in einer ArrayList. Jetzt will ich allerdings verhindern, dass zwei identische, also Bilder mit denselben Pixeln abgespeichert werden. Weiß einer von euch wie das zu bewerkstelligen ist? Danke!!
 
G

Gast2

Gast
Das einfachste wäre sicherlich ne eigene BufferedImage Klasse zu schreiben die dann equals überschreibt.
Hier könntest du dann zuerst prüfen ob die Bilder die selben Dimensionen haben und anschließend Pixel für Pixel auf Gleichheit prüfen.

Je nach Beschaffenheit der Bilder und wie oft du das prüfen willst kann das ganze dann schon etwas dauern, ich würds aber einfach mal testen.
 

Marco13

Top Contributor
Ob man da wirklich eine eigene Klasse machen sollte, weiß ich nicht. Einerseits ist es wohl mit Abstand die einfachste Lösung, andererseits legt man sich auf den Typ fest. Vererbung kann schrecklich unflexibel sein.

Wenn man das aber macht und equals überschreibt, muss man ohnehin auch hashCode überschreiben. Wenn man davon ausgehen KÖNNTE, dass die Bilder nicht veränderbar sind, könnte man den HashCode im Konstruktor (oder sonstwo nur EINmal) berechnen, und beim equals-Vergleich dann zumindest sowas machen wie
if (this.precomputedHashCode != other.precomputedHashCode) return false;

Aber vermutlich kann man das nicht.
 

Nasdneb

Mitglied
Klappt alles ganz wunderbar. So sieht meine equals Methode aus:

Java:
	public boolean equals(Object o){
		if(o instanceof ComparedImage){
			ComparedImage img = (ComparedImage) o;
			boolean equal = true;
			for(int width = 0; width < img.getWidth(); width++)
			for(int height = 0; height < img.getWidth(); height++){
				if(img.getRGB(width, height) != this.getRGB(width, height)){
					equal = false;
				}
			}
			return equal;
		}
		return false;

	}
 
G

Gast2

Gast
Falls deine Bilder unterschiedliche Dimensionen haben können würde ich vorher noch die Dimensionen prüfen.
Ansonsten solltest du überlegen so wie Marco13 vorzugehen, das kann dir ne menge zeit sparen wenn du Bilder öfter miteinander vergleichen willst.
 

Marco13

Top Contributor
Das Problem ist, dass man vermutlich nicht davon ausgehen kann, dass das Bild sich nicht mehr ändert.

Aber die Abfrage bzw. Überprüfung der Größe könnte (je nach Anwendungsfall) auch schon SEHR viel Geschwindigkeitsvorteil bringen (eben wenn sie unterschiedlich groß sind :rolleyes: ;) ).

Diese Größenüberprüfung ist aber aber keine optionale Sache: Man MUSS die Größe überprüfen, sonst haut's ihn beim Vergleich ungleichgroßer Bilder mit einer ... IrgendwasOutOfBoundsException oder so raus ...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J BufferedImages nacheinander als Video anzeigen AWT, Swing, JavaFX & SWT 14
F BufferedImages serialisieren AWT, Swing, JavaFX & SWT 8
V 2D-Grafik Schnelles ändern von Pixelfarbe in BufferedImages AWT, Swing, JavaFX & SWT 4
GianaSisters 2D-Grafik 2 BufferedImages zusammenfügen wird Schwarz/Weiß AWT, Swing, JavaFX & SWT 10
X Video's aus JPG's oder BufferedImages generieren AWT, Swing, JavaFX & SWT 3
U 2 Fragen zu BufferedImages AWT, Swing, JavaFX & SWT 19
U BufferedImages funktionieren nicht AWT, Swing, JavaFX & SWT 36
N Problem mit BufferedImages und ram verbrauch AWT, Swing, JavaFX & SWT 6
M BufferedImages zusammenfügen AWT, Swing, JavaFX & SWT 7
M Strings im JTextPane vergleichen und mit StyledDocument formatieren AWT, Swing, JavaFX & SWT 3
A Swing Zwei Klassen mit Textfeld Eingaben vergleichen und Ausgabe erzeugen AWT, Swing, JavaFX & SWT 10
R AWT Werte aus NumberField vergleichen AWT, Swing, JavaFX & SWT 9
A Swing 2 JSlider verknüpfen und mit einem JTextField vergleichen, dann Ausgabe AWT, Swing, JavaFX & SWT 5
A Swing zwei JComboBoxen miteinander vergleichen und anschließend Button umwandeln AWT, Swing, JavaFX & SWT 7
D Datum im Nachocalendar vergleichen AWT, Swing, JavaFX & SWT 2
T Kontrast zweier Farben vergleichen AWT, Swing, JavaFX & SWT 5
H Puzzle - Listen erstellen, array & liste vergleichen AWT, Swing, JavaFX & SWT 28
H Puzzle - Erkennen wenn gelöst (array vergleichen) AWT, Swing, JavaFX & SWT 10
B Problem mit Passwort einlesen und vergleichen AWT, Swing, JavaFX & SWT 2
A Bilder vergleichen AWT, Swing, JavaFX & SWT 4
G BufferedImage.getRGB() mit 3 int-Werten vergleichen AWT, Swing, JavaFX & SWT 2
G Texte miteinander vergleichen AWT, Swing, JavaFX & SWT 5
H Grafiken mittels Hashing vergleichen. aber wie? AWT, Swing, JavaFX & SWT 20
K TreeModels vergleichen AWT, Swing, JavaFX & SWT 3
T Frage zu JTree: Leaf Objekte vergleichen AWT, Swing, JavaFX & SWT 3
M JTextField auslesen und Wert vergleichen? AWT, Swing, JavaFX & SWT 2
F Bilder vergleichen AWT, Swing, JavaFX & SWT 14
P Inhalt aus JTextField vergleichen AWT, Swing, JavaFX & SWT 8

Ähnliche Java Themen

Neue Themen


Oben