Bilder Vergleichen

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
PaulchenPanter24
Beiträge: 8
Registriert: 09.03.2005 14:42

Bilder Vergleichen

Beitrag von PaulchenPanter24 »

hi

ich suche in Code mit dem ich 2 Bilder vergleichen kann!

als erstes las ich von rechner per zufall ein bild anzeigen.
dannach soll er das bild mit allem gespeichertn bildern vergleich und
rausfinden welches bild angezeeigt wird!

erstens ist sowas möglich?
weitens wen ja wie?

mfg PAnter
Benutzeravatar
Batze
Beiträge: 1492
Registriert: 03.06.2005 21:58
Wohnort: Berlin
Kontaktdaten:

Beitrag von Batze »

Ja, das ist möglich!

Du willst also vermutlich nicht 2 Bild-Dateien vergleichen, sondern konkret die Bilder (welche Genauigkeit).
Am besten du vergleichst die einfach Pixelweise, dann bist du abselut sicher.
Hier sind meine Codes (aber die Seite geht gerade nicht):
http://www.basicpure.de.vu
PaulchenPanter24
Beiträge: 8
Registriert: 09.03.2005 14:42

Beitrag von PaulchenPanter24 »

und wie geht sowas?

(EDIT: fehler ausgemerzt)
Benutzeravatar
Batze
Beiträge: 1492
Registriert: 03.06.2005 21:58
Wohnort: Berlin
Kontaktdaten:

Beitrag von Batze »

Kommt ja schon, musste ich nur eben noch schreiben. <)

Code: Alles auswählen

If LoadImage(0, "bitmap1.bmp") = 0 : End : EndIf
If LoadImage(1, "bitmap2.bmp") = 0 : End : EndIf

Procedure SindBilderGleich(B1, B2, Fehlermaximum)
  UseImage(B1)
  W1 = ImageWidth()
  H1 = ImageHeight()
  
  UseImage(B2)
  W2 = ImageWidth()
  H2 = ImageHeight()
   
  If H1 <> H2 Or W1 <> W2
    ProcedureReturn 0
  EndIf
  
  For x=0 To W1-1
    For y=0 To H1-1
      UseImage(B1)
      StartDrawing(ImageOutput())
      Color = Point(x, y)
      StopDrawing()
      UseImage(B2)
      StartDrawing(ImageOutput())
      If Color <> Point(x,y)
        Falsche + 1
      EndIf
      StopDrawing()
      If Falsche > Fehlermaximum
        ProcedureReturn 0
      EndIf
    Next
  Next
  Debug Falsche
  ProcedureReturn 1 
EndProcedure

Debug SindBilderGleich(0, 1, 10) ; Maximal zehn Fehler !
Es geht auch irgendwie schneller aber erst mal nur die Grundlage.

Edit: Da war noch ein Fehler!
Hier sind meine Codes (aber die Seite geht gerade nicht):
http://www.basicpure.de.vu
Leo
Beiträge: 420
Registriert: 26.10.2004 18:26

Beitrag von Leo »

Geht auch einfacher:

Code: Alles auswählen

if MD5FileFingerprint("bitmap1.bmp") = MD5FileFingerprint("bitmap2.bmp") 
    debug "gleich"
else
    debug "ungleich"
endif
Benutzeravatar
Batze
Beiträge: 1492
Registriert: 03.06.2005 21:58
Wohnort: Berlin
Kontaktdaten:

Beitrag von Batze »

@Leo: Hast du meinen Beitrag auch gründlich gelesen?
Du willst also vermutlich nicht 2 Bild-Dateien vergleichen, sondern konkret die Bilder.
Es gibt ja auch png usw. :allright:
Also: Leo's ist total unsicher (aber natürlich viel schneller) :wink:
Hier sind meine Codes (aber die Seite geht gerade nicht):
http://www.basicpure.de.vu
Leo
Beiträge: 420
Registriert: 26.10.2004 18:26

Beitrag von Leo »

Achso, sorry, hab ich nicht gelesen. /:->

Trotzdem könnte man das schneller machen, indem man direkt aus dem Speicherbereich von der Grafikkarte liest. Ich versuch das mal jetzt :)
PaulchenPanter24
Beiträge: 8
Registriert: 09.03.2005 14:42

Beitrag von PaulchenPanter24 »

ums besserzusagen ich hab ca 100 bmp dateien und will das er genau ein paar findet!

der vorschlag 2 dürfte da doch besser sein oder?
Leo
Beiträge: 420
Registriert: 26.10.2004 18:26

Beitrag von Leo »

Ja
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag von Deeem2031 »

Mit einer einfachen FileCompare-Procedure (z.B. http://forums.purebasic.com/german/viewtopic.php?t=4005 ) wärs noch besser, da nicht erst der MD5-Code berechnet und die MD5-Strings dann verglichen werden müssen.
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
Antworten