zwei UIImages miteinander vergleichen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • zwei UIImages miteinander vergleichen

    Hallo zusammen,

    Ich habe da mal wieder eine kleine Frage:

    Kann ich zwei UIImages miteinander vergleichen? Wenn ja, wie ?

    Gruß

    der Kalle
    "Die deutsche Rechtschreibung ist Freeware, sprich, man kann sie
    kostenlos nutzen. Allerdings ist sie nicht Open Source, d.h. man darf
    sie nicht verändern oder in veränderter Form veröffentlichen".
  • Probier es mal hiermit:


    Quellcode

    1. NSData *imageData1 = UIImagePNGRepresentation(image1, 1.0);
    2. NSData *imageData2 = UIImagePNGRepresentation(image2, 1.0);
    3. if([imageData1 isEqual:imageData2])
    4. NSLog(@"Die Bilder sich gleich!");



    Damit solltest du die Bilder vergleichen können. Möchstest du wissen, ob es genau das gleiche ist? mit isEqual sollte das funktionieren.
    [url]http://www.isolute.de[/url]

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von andreasprang ()

  • Leider nein. Der Vergleich bliebt ohne Erfolg. Selbst mit der Korrektur des Quality-Values der ja nur bei JPEG zum Tragen kommt :)
    Vielleicht noch andere Vorschläge ?
    "Die deutsche Rechtschreibung ist Freeware, sprich, man kann sie
    kostenlos nutzen. Allerdings ist sie nicht Open Source, d.h. man darf
    sie nicht verändern oder in veränderter Form veröffentlichen".
  • andreasprang schrieb:

    Möchstest du wissen, ob es genau das gleiche ist? mit isEqual sollte das funktionieren.

    Das klappt aber nur, wenn beide Bilder die exakt gleichen Daten enthalten.

    Ranseia schrieb:

    Kann ich zwei UIImages miteinander vergleichen? Wenn ja, wie ?

    Was meinst Du mit vergleichen - auf Gleichheit prüfen? Oder willst Du wissen, ob zwei Bilder das gleiche darstellen? Oder willst Du zwei Bilder bezüglich ihrer Metadaten (Größe, Auflösung usw.) vergleichen? Oder, oder, oder...
    „Meine Komplikation hatte eine Komplikation.“
  • Wie bei einem Memory-Spiel...
    Ich habe 16 Felder, 8 Bilder und 8 Duplikate.
    Ich will die Päarchen finden.
    Wenn es das selbe Bild(motiv) ist, sollen die Bilder aus dem Spiel genommen werden.
    "Die deutsche Rechtschreibung ist Freeware, sprich, man kann sie
    kostenlos nutzen. Allerdings ist sie nicht Open Source, d.h. man darf
    sie nicht verändern oder in veränderter Form veröffentlichen".
  • Die Frage scheint mehr konzeptioneller Art zu sein.
    Ich würde vorschlagen, Deine Instanzen der Benutzeroberflächen (Button, Layer) zeigen dasselbe Bild, sodass Du sie direkt vergleichen kannst, wie von Amin vorgeschlagen:

    Quellcode

    1. [buttonXX.image isEqual: buttonYY.image];

    …oder so ähnlich.
    Du erzeugst das doch irgendwo.
    I would be embarrassed if they did not spy on me.
  • longW schrieb:

    Die Frage scheint mehr konzeptioneller Art zu sein.
    Ich würde vorschlagen, Deine Instanzen der Benutzeroberflächen (Button, Layer) zeigen dasselbe Bild, sodass Du sie direkt vergleichen kannst, wie von Amin vorgeschlagen:

    Quellcode

    1. [buttonXX.image isEqual: buttonYY.image];

    …oder so ähnlich.
    Du erzeugst das doch irgendwo.

    Wenn er diese Bedingung halten kann (Identität), dann kann er ja sogar mit == auf Identität testen. Da kann man dann auch direkt zuweisen und muss nicht mit Arrays oder so arbeiten (zumal die Bilder keine Reihenfolge aufweisen dürften: kein Array).
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • Amin Negm-Awad schrieb:

    Wieso nicht gleich die Images vergleichen? Das müsste doch funktionieren?!

    Quellcode

    1. [image isEqual:image2]

    UIImage überschreibt aber nicht die Methoden isEqual: und hash. Damit dürfte das nur bei Referenzgleichheit funktionieren.

    Amin Negm-Awad schrieb:

    Zumal bei ihm ohnehin Identität vorliegen dürfte.

    Verlässt Du Dich damit nicht sehr stark auf ein Implementierungsdetail?

    Abgesehen davon, lässt diese Lösung nur das Langweilo-Standard-Memory zu, bei dem immer gleiche Bilder aufgedeckt werden müssen. Für Fortgeschrittene sind ja Varianten denkbar, bei denen unterschiedliche Bilder mit einer Gemeinsamkeit zusammengehören.
    „Meine Komplikation hatte eine Komplikation.“
  • Wenn mich nicht alles täuscht, sind Images doch Twintones. Aber ich kann die Identität ja beim Laden sicherstellen. Ich sehe da kein Problem.

    Wenn unterschiedliche Bilder nach Gemeinsamkeiten verglichen werden sollen, sollte er nicht Bilder vergleichen. Das ist nicht das Thema. Übrigens würde ich auch hier die Zusammengehörigkeit selbst modellieren. So weit ist Cocoa noch nicht, dass es Gemeinsamkeiten auf Bildern findet.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • Amin Negm-Awad schrieb:

    Wenn mich nicht alles täuscht, sind Images doch Twintones. Aber ich kann die Identität ja beim Laden sicherstellen. Ich sehe da kein Problem.

    Wenn mensch dafür sowieso Programmieraufwand hast, dann kann mensch es auch direkt ordentlich machen.

    Amin Negm-Awad schrieb:

    Wenn unterschiedliche Bilder nach Gemeinsamkeiten verglichen werden sollen, sollte er nicht Bilder vergleichen. Das ist nicht das Thema. Übrigens würde ich auch hier die Zusammengehörigkeit selbst modellieren. So weit ist Cocoa noch nicht, dass es Gemeinsamkeiten auf Bildern findet.

    Das sehe ich genauso. Mir ging es eher darum, dass der Ansatz des "Bildvergleichs", und sei es nur ein Pointervergleich, sehr unflexibel ist. Gerade bei so einem einfachen Spiel, liegt es ja sehr Nahe, Varianten davon zu entwickeln. Gemeinsamkeiten der Bilder müssen ja übrigens auch nicht optischer Natur sein, z. B. könnten die Karten Bilder von Prominentenpaaren zeigen.
    „Meine Komplikation hatte eine Komplikation.“
  • macmoonshine schrieb:

    Amin Negm-Awad schrieb:

    Wieso nicht gleich die Images vergleichen? Das müsste doch funktionieren?!

    Quellcode

    1. [image isEqual:image2]

    UIImage überschreibt aber nicht die Methoden isEqual: und hash. Damit dürfte das nur bei Referenzgleichheit funktionieren.

    Amin Negm-Awad schrieb:

    Zumal bei ihm ohnehin Identität vorliegen dürfte.

    Verlässt Du Dich damit nicht sehr stark auf ein Implementierungsdetail?

    Abgesehen davon, lässt diese Lösung nur das Langweilo-Standard-Memory zu, bei dem immer gleiche Bilder aufgedeckt werden müssen. Für Fortgeschrittene sind ja Varianten denkbar, bei denen unterschiedliche Bilder mit einer Gemeinsamkeit zusammengehören.


    Nun ja, laut OP:

    Ranseia schrieb:

    Wie bei einem Memory-Spiel...
    Ich habe 16 Felder, 8 Bilder und 8 Duplikate.

    'Duplikat' legt ja nun die Vermutung nahe, dass es einfach dasselbe Objekt noch einmal ist.

    C-Quellcode

    1. UIImage *imageOne = *imageTwo = [UIImage imageWith...];

    Selbst wenn es nur eine Kopie ist, dürfte das -isEqual: doch greifen.

    C-Quellcode

    1. UIImage *imageOne = [UIImage imageWith...];
    2. UIImage *imageTwo = [imageOne copy];


    Seine Anwendung kann der OP gern selbst konzeptionieren, da müssen wir jetzt nicht unbedingt helfen. :P
    Falls aber doch: ich würde eine Art Puzzlevariante vorschlagen. Ein Bild stellt die linke Seite eines Photos dar, das andere Bild die rechte Seite.

    Zum 'modellieren' fällt mir noch eine einfache 1:1 Beziehung 'passendesBild' ein.
    Dann kann man das Teil (im Sinne von 'tile') selbst fragen, ob es zu dem anderen Teil (tile) passt.

    C-Quellcode

    1. if([imageOne passendesBild] == imageTwo){}
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • Also...

    erstmal 1000 Dank an Eure Antworten. Leider funktioniert der Bildvergleich nicht so wie geplant. Die einfachste Methode und damit auch gleichzeitig beste Methode war es den Dingern mittels .tag eine Nummer zuzuweisen und anschließend die Tags mit == zu prüfen.

    Mal was anderes wie heißt eigentlich diese Box die eingeblendet wird, wenn z.B. der Batteriestand nur noch 20% beträgt? Irgendwie kann ich das nicht finden.


    Gruß

    der Kalle
    "Die deutsche Rechtschreibung ist Freeware, sprich, man kann sie
    kostenlos nutzen. Allerdings ist sie nicht Open Source, d.h. man darf
    sie nicht verändern oder in veränderter Form veröffentlichen".