Bildübereinstimmung überprüfen

  • Hallöchen!

    edit: Habe bereits selber die Lösung gefunden mehr oder weniger! Werde sie später posten! Muss allerdings erst noch etwas herumbasteln!
    Sicherlich nicht ganz perfekt aber klappt schon so! Falls nicht ggf. mal mit der Tolleranz spielen, da diese ja in diesem Fall für alle Bilder gleich hoch wäre.

    Spoiler anzeigen
    [autoit]

    #include<Array.au3>
    #include <ImageSearch.au3>

    [/autoit] [autoit][/autoit] [autoit]

    HotKeySet("{ENTER}", "_StartSearch")
    HotKeySet("{ESC}", "_Exit")

    [/autoit] [autoit][/autoit] [autoit]

    Local $ret = _GetFilesFolder_Rekursiv('.', 'bmp', 0, 0)

    [/autoit] [autoit][/autoit] [autoit]

    If IsArray($ret) Then
    $start = 1
    EndIf

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    while 1
    sleep(50)
    WEnd

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _StartSearch()

    If IsDeclared("start") Then

    $Bild_x1 = 0
    $Bild_y1 = 0

    $max = $ret[0]
    $count = 1

    While $count <= $max

    $Bild = $ret[$count]
    ConsoleWrite($Bild & @CRLF & $Bild & @CRLF)
    $result = _ImageSearchArea($Bild, 1, 0, 0, @DesktopWidth, @DesktopHeight, $Bild_x1, $Bild_y1, 40)
    ConsoleWrite($Bild_x1 & "-" & $Bild_y1 & @CRLF)

    If $result = 1 Then
    ConsoleWrite($Bild & " ist bereits in der Gallerie vorhanden!" & @CRLF & @CRLF)
    Else
    ConsoleWrite($Bild & " " & $count & " - Es wurde keine Übereinstimmung gefunden!" & @CRLF & @CRLF)
    EndIf

    $count +=1
    WEnd

    Else
    EndIf

    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _Exit()
    Exit
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;==================================================================================================
    ; Function Name: _GetFilesFolder_Rekursiv($sPath [, $sExt='*' [, $iDir=-1 [, $iRetType=0 ,[$sDelim='0']]]])
    ; Description: Rekursive Auflistung von Dateien und/oder Ordnern
    ; Parameter(s): $sPath der Basispfad für die Auflistung ('.' -aktueller Pfad, '..' -Parentpfad)
    ; $sExt Erweiterung für Dateiauswahl '*' oder -1 für alle (Standard)
    ; $iDir -1 Dateien+Ordner(Standard), 0 nur Dateien, 1 nur Ordner
    ; optional: $iRetType 0 gibt Array, 1 gibt String zurück
    ; optional: $sDelim legt Trennzeichen für Stringrückgabe fest
    ; 0 -@CRLF (Standard) 1 -@CR 2 -@LF 3 -';' 4 -'|'
    ; Return Value(s): Array (Standard) od. String mit den gefundenen Pfaden der Dateien und/oder Ordner
    ; Array[0] enthält die Anzahl der gefundenen Dateien/Ordner
    ; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
    ; Modified: oetzn
    ;==================================================================================================

    [/autoit] [autoit][/autoit] [autoit]

    Func _GetFilesFolder_Rekursiv($sPath, $sExt = '*', $iDir = -1, $iRetType = 0, $sDelim = '0')
    Global $oFSO = ObjCreate('Scripting.FileSystemObject')
    Global $strFiles = ''
    Switch $sDelim
    Case '1'
    $sDelim = @CR
    Case '2'
    $sDelim = @LF
    Case '3'
    $sDelim = ';'
    Case '4'
    $sDelim = '|'
    Case Else
    $sDelim = @CRLF
    EndSwitch
    If ($iRetType < 0) Or ($iRetType > 1) Then $iRetType = 0
    If $sExt = -1 Then $sExt = '*'
    If ($iDir < -1) Or ($iDir > 1) Then $iDir = -1
    _ShowSubFolders($oFSO.GetFolder($sPath), $sExt, $iDir, $sDelim)
    If $iRetType = 0 Then
    Local $aOut
    $aOut = StringSplit(StringTrimRight($strFiles, StringLen($sDelim)), $sDelim, 1)
    If $aOut[1] = '' Then
    ReDim $aOut[1]
    $aOut[0] = 0
    EndIf
    Return $aOut
    Else
    Return StringTrimRight($strFiles, StringLen($sDelim))
    EndIf
    EndFunc ;==>_GetFilesFolder_Rekursiv

    [/autoit] [autoit][/autoit] [autoit]

    Func _ShowSubFolders($Folder, $Ext = '*', $Dir = -1, $Delim = @CRLF)
    $aExt = StringSplit($Ext, "|", 2) ;von mir eingefügt
    ;_ArrayDisplay($aExt)
    If Not IsDeclared("strFiles") Then Global $strFiles = ''
    If ($Dir = -1) Or ($Dir = 0) Then
    For $file In $Folder.Files
    If $Ext <> '*' Then
    For $i = 0 To UBound($aExt) - 1 ;von mir eingefügt
    If StringRight($file.Name, StringLen($aExt[$i])) = $aExt[$i] Then _ ; $Ext in $Ext[$i] geändert
    $strFiles &= $file.Path & $Delim
    Next ;von mir eingefügt
    Else
    $strFiles &= $file.Path & $Delim
    EndIf
    Next
    EndIf
    For $Subfolder In $Folder.SubFolders
    If ($Dir = -1) Or ($Dir = 1) Then $strFiles &= $Subfolder.Path & '\' & $Delim
    _ShowSubFolders($Subfolder, $Ext, $Dir, $Delim)
    Next
    EndFunc ;==>_ShowSubFolders

    [/autoit]


    Wäre es möglich ein ImageSearch-Script mit einem abgewandelten Script von Bugfix so zu kombinieren, das wenn z.B. Bilder die online in einer Bildergallerie sind und dieselben mit einem Bild im Offlinebetrieb übereinstimmen, mir eine MsgBox sagen würde..."Hey das Bild xyz ist bereits in der Gallerie vorhanden!"?

    Die Bilder müssen aber online NICHT zwangsläufig die selben Namen haben, da im Offlinebetrieb auch Bilder von unterschiedlichen Kameras sind und die haben dann teilweise so automatisch erstellte Namen.

    hier eine leicht abgewandelte Version von dem Script von Bugfix (funktioniert auch):

    Spoiler anzeigen
    [autoit]

    #include<Array.au3>

    [/autoit] [autoit][/autoit] [autoit]

    $ret = _GetFilesFolder_Rekursiv('.', 'bmp|png',0,1)
    If IsArray($ret) Then
    _ArrayDisplay($ret, 'Rekursiv alle au3-Dateien')
    Else
    ConsoleWrite($ret & @CRLF)
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    ;==================================================================================================
    ; Function Name: _GetFilesFolder_Rekursiv($sPath [, $sExt='*' [, $iDir=-1 [, $iRetType=0 ,[$sDelim='0']]]])
    ; Description: Rekursive Auflistung von Dateien und/oder Ordnern
    ; Parameter(s): $sPath der Basispfad für die Auflistung ('.' -aktueller Pfad, '..' -Parentpfad)
    ; $sExt Erweiterung für Dateiauswahl '*' oder -1 für alle (Standard)
    ; $iDir -1 Dateien+Ordner(Standard), 0 nur Dateien, 1 nur Ordner
    ; optional: $iRetType 0 gibt Array, 1 gibt String zurück
    ; optional: $sDelim legt Trennzeichen für Stringrückgabe fest
    ; 0 -@CRLF (Standard) 1 -@CR 2 -@LF 3 -';' 4 -'|'
    ; Return Value(s): Array (Standard) od. String mit den gefundenen Pfaden der Dateien und/oder Ordner
    ; Array[0] enthält die Anzahl der gefundenen Dateien/Ordner
    ; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
    ; Modified: oetzn
    ;==================================================================================================
    Func _GetFilesFolder_Rekursiv($sPath, $sExt = '*', $iDir = -1, $iRetType = 0, $sDelim = '0')
    Global $oFSO = ObjCreate('Scripting.FileSystemObject')
    Global $strFiles = ''
    Switch $sDelim
    Case '1'
    $sDelim = @CR
    Case '2'
    $sDelim = @LF
    Case '3'
    $sDelim = ';'
    Case '4'
    $sDelim = '|'
    Case Else
    $sDelim = @CRLF
    EndSwitch
    If ($iRetType < 0) Or ($iRetType > 1) Then $iRetType = 0
    If $sExt = -1 Then $sExt = '*'
    If ($iDir < -1) Or ($iDir > 1) Then $iDir = -1
    _ShowSubFolders($oFSO.GetFolder($sPath), $sExt, $iDir, $sDelim)
    If $iRetType = 0 Then
    Local $aOut
    $aOut = StringSplit(StringTrimRight($strFiles, StringLen($sDelim)), $sDelim, 1)
    If $aOut[1] = '' Then
    ReDim $aOut[1]
    $aOut[0] = 0
    EndIf
    Return $aOut
    Else
    Return StringTrimRight($strFiles, StringLen($sDelim))
    EndIf
    EndFunc ;==>_GetFilesFolder_Rekursiv

    [/autoit] [autoit][/autoit] [autoit]

    Func _ShowSubFolders($Folder, $Ext = '*', $Dir = -1, $Delim = @CRLF)
    $aExt = StringSplit($Ext, "|", 2) ;von mir eingefügt
    ;~ _ArrayDisplay($aExt)
    If Not IsDeclared("strFiles") Then Global $strFiles = ''
    If ($Dir = -1) Or ($Dir = 0) Then
    For $file In $Folder.Files
    If $Ext <> '*' Then
    For $i = 0 To UBound($aExt) - 1 ;von mir eingefügt
    If StringRight($file.Name, StringLen($aExt[$i])) = $aExt[$i] Then _ ; $Ext in $Ext[$i] geändert
    $strFiles &= $file.Path & $Delim
    Next ;von mir eingefügt
    Else
    $strFiles &= $file.Path & $Delim
    EndIf
    Next
    EndIf
    For $Subfolder In $Folder.SubFolders
    If ($Dir = -1) Or ($Dir = 1) Then $strFiles &= $Subfolder.Path & '\' & $Delim
    _ShowSubFolders($Subfolder, $Ext, $Dir, $Delim)
    Next
    EndFunc ;==>_ShowSubFolders

    [/autoit]

    hier mal nen relativ smples ImageSearch-Scrip (funktioniert auch soweit!):

    Spoiler anzeigen
    [autoit]

    #include <ImageSearch.au3>

    [/autoit] [autoit][/autoit] [autoit]

    HotKeySet("{ENTER}", "_StartSearch")
    HotKeySet("{ESC}", "_Exit")

    [/autoit] [autoit][/autoit] [autoit]

    $Bild1x1 = 0
    $Bild1y1 = 0

    [/autoit] [autoit][/autoit] [autoit]

    $Bild = "Testbild.bmp"

    [/autoit] [autoit][/autoit] [autoit]

    while 1
    sleep(50)
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _StartSearch()

    $result1 = _ImageSearchArea($Bild,1,0,0,@DesktopWidth,@DesktopHeight,$Bild1x1,$Bild1y1,0)

    If $result1 = 1 Then
    ConsoleWrite($result1 & " ist bereits in der Gallerie vorhanden!" & @CRLF)
    EndIf

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _Exit()
    Exit
    EndFunc

    [/autoit]

    Meine Frage jetzt wäre, wie bekomme ich es hin das er mir jedes gefundene *.bmp oder auch *.png in die Variable $Bild einfügt und erstmal überprüft ob das Bild vorhanden ist...und danach dann das nächste Bild vom Offlinemodus nimmt und ebenfalls dann wieder überprüft und so weiter?

    Hab da selber schon ein wenig herumgespielt aber bekomme es iwie nicht ganz hin. Vllt ist ja hier wer nen bischen "heller" als ich. :rofl:
    Im Prinzip spuckt mir das Script von Bugfix ja schon nahe zu alles aus, was ich brauche. Allerdings weiss ich nicht, wie ich z.B. die Gesammtanzahl seperat speichern kann (wieviele Treffer er gefunden hat) und auch nicht wie ich auf einzelne Treffer zugreifen kann (als Array wäre nett, da man das ganze dann einfach in einer Schleife stecken könnte).

    edit: Und was jetzt nichts direkt mit dem Thema zu tun hat...bzw ich bin mir da nicht so ganz sicher ob oder eben ob nicht.
    Hatte iwo was davon gelesen das man Bilder auszulesen kann und in Strings speichern kann?!
    Hat da wer Ahnung von...falls ja wisste ihr vllt Seiten wo ich etwas dazu lesen kann?
    Weil auch wenn es nix mit dem Thema zu tun hat finde ich hört sich das einfach interessant an. hahahaha ;)

    edit2: Da gäb es dann sicher auch noch möglichkeiten z.B. Bilder auf Teil-Übereinstimmungen zu überprüfen oder? Und noch einiges mehr würde mir da einfallen..auch wenn es mir gerade eigentlich nix nutzen würde, aber wäre doch auch denkbar zu überprüfen, welches Bild z.B. ein Original und welches eine Kopie ist usw. oder?! :D

    9 Mal editiert, zuletzt von Chulio (6. Januar 2014 um 03:21)

  • Vorrausgesetzt dass sich die Bilder im Dateiformat nicht unterschieden und tatsächlich nur die Bezeichnung anders ist, lassen sich alle Bilder via "FileRead" lesen und dann vergleichen. Dabei musst du logischerweise nur prüfen, ob der Inhalt der gleiche ist. In etwa so:

    [autoit]

    $sPic1 = FileRead('Picture1.png')
    $sPic2 = FileRead('Picture2.png')
    If $sPic1 == $sPic2 Then MsgBox(0, 'Erfolg', 'Bild 1 entspricht Bild 2')

    [/autoit]
  • Das Format wäre wohl immer das selbe, da selbst wenn ich nen Bild hochladen würde und es dann umbenannt wird ja keine Formatänderung stattfinden würde. Wäre ja auch sinnlos (zumindest in meinem Fall). Allerdings müsste ich mir für deine Version dann extra noch nen Script mit ftp-Daten etc basteln.

    Bin halt so über das Script von Bugfix gestoltert und würde das gerne mit den beiden oberen Scripten machen. Wäre denke ich der mit Abstand geringste Aufwand. Alles was ich da wissen müsste wäre, wie ich mir ausgeben lassen kann, wieviele Bilder das Script von Bugfix findet (also wievile Treffer er landet) und wie ich auf einzelne Pfadangabn zugreifen kann.

    z.B.: $ret[0] oder so änlich halt...

    Allerdings Danke trotzdem für die schnelle Antwort und vor allem wusste ich auch nicht das es so geht wie du gepostet hast. Sehr interessant! ;)

  • Habe das Thema nun doch nochmal geöffnet. Grund dafür ist, das ich z.B. die PixelSearchfunktion so auf ein Bild angewendet habe bzw auf mehrere Bilder und die Tolleranz z.B. bei 40 lag. Die Bilder wurden immer gefunden.

    Komischerweise finde ich sie nun mit den selben Tolleranzwerten nicht mehr. das obige Script was ich als Lösung habe ist aber so weit ich das sehen kann in Ordnung. Es funktionirt ja auch nur nicht mehr mit den selben Werten?! Ist da doch ein Fehler drin, oder hätte iwer eine Erklärung für das Ganze? Ich finde es recht seltsam!

    • Offizieller Beitrag

    Die PixelSearch-Funktionen zu verwenden um Bilder auf Identität zu prüfen halte ich für wenig sinnvoll.
    Wie wäre es, wenn du zu den Bildern online deren Hashwert speicherst. In deiner lokalen Sammlung vergleichst du dann nach Kombination Dateiname / Hashwert.

    Oder such einfach mal gründlich im Forum. Ich bin mir ziemlich sicher, dass ich eine Funktion zum Bildinhaltsvergleich schon mal in einem Post gesehen habe.

  • Wie Bugfix bereits sagte arbeite lieber mit MD5 oder vergleichbaren Hashfunktionen. Am besten pflegst du beim Upload eine zentrale Indexdatei auf dem Webserver in dem die Hashwerte aller Bilder vermerkt sind. Du musst dann nur noch diese Indexdatei herunterladen und mit den Hashwerten der lokalen Bilder abgleichen.

  • Hi,

    Zitat

    Hatte iwo was davon gelesen das man Bilder auszulesen kann und in Strings speichern kann?!

    Du solltest dir klar werden über den Unterschied von einem Bildformat (Grafikformat) welches den Dateiinhalt- und Aufbau bestimmt, also bspw. JPEG, BMP, GIF, PNG, TIF und dem, was du als "Bild" (Grafik) auf dem Monitor siehst. Zwei völlig verschiedene Paar Schuhe!

    Das was in einer Datei steht, ist per se ein "String". Dateiinhalte kannst du also einfachst mit dem schon o.g. Stringvergleich überprüfen.

    Was auf dem Monitor angezeigt wird, ist IMMER eine Rastergrafik, da der Monitor eine Breite und Höhe (Punktdichte) und ein bestimmtes Pixelformat (Farbtiefe) hat.
    Diese "Pixel" auf dem Monitor lassen sich am einfachsten als Bitmap auslesen. Jedes Pixel besteht aus 3 Farbanteilen Rot, Grün, Blau (RGB) mit jeweils 255 Abstufungen. Den "Alphakanal", welcher die Tranzparenz ausdrückt, gibt es wiederum nur im Dateiformat...

    Wenn du also bestimmte Bereiche auf dem Monitor mit einer Datei vergleichen willst, dann funktioniert das nur dann, wenn beide das gleiche Format haben!
    Das einfachste Format, um die Pixel vom Monitor auszulesen ist Bitmap, das sind einfach alle Pixel zeilenweise als RGB nacheinander mit ihrem Wert als Bytes auszulesen. Eine Aufeinanderfolge von Bytes ist nichts anderes als ein String...

    Um das jetzt mit einem Bild in einer Datei zu vergleichen, muss der Dateiinhalt in eine Bitmap umgewandelt werden, und dann kann wiederum ein einfacher Stringvergleich erfolgen.

    Teilbilder erkennt man einfach, indem man im String nach der ersten "Zeile" des Suchbildes sucht, hat man diese gefunden, muss ja an der Position im String plus Bildbreite die zweite "Suchzeile" übereinstimmen uswusf. bis die Höhe des Suchbildes abgearbeitet ist.
    Alles sehr schnell und easy machbar per AutoIt-Stringfunktionen. Für direkte Übereinstimmung braucht man also auch keine Imagesearch()-dll, wenn man weiss, was man überhaupt machen will :rolleyes:
    Beispielscript dafür: PushTheButton hier im Forum...
    Findet Teilbilder auf dem gesamten Monitor in ca. 5-10 Millisekunden (AutoIt-Stringvergleich!)

    Wenn man, wie bei Bottern häufig erforderlich (wobei das auch nur deshalb so ist weil die allermeisten keine Ahnung haben, ansonsten würden sie ja auch nicht Botten), eine gewisse "Abweichung" der Suchbilder mit einkalkulieren (Shade-Variation) muss, dann sucht man einfach "Strings" in den Daten, welche der Abweichung entsprechen. Also erweitert sich der Suchalgoritmus für eine Abweichung von 10 Farbstufen nicht auf:
    Ist PixelByte=SuchByte dann...
    sondern zu
    Ist Pixelbyte>SuchByte-10 and PixelByte<Suchbyte+10
    Das allerdings ist in AutoIt nicht mehr so schnell, da direkte Stringvergleiche nicht mehr eingesetzt werden können.

    Das Verfahren zur Suche auf dem Monitor bzw. bei zwei Dateien(die nicht am Monitor angezeigt werden müssen) sollte also klar sein....

    Allerdings ist das für dein Vorhaben (Vergleich von 2 Bilddateien) völlig unerheblich.
    Dazu muss weder das Suchbild, noch das gesuchte Bild angezeigt werden.
    Ein einfacher Vergleich von Dateiinhalt (bspw. Hashwerte der Dateien auf dem Server) mit dem Hash des Suchbildes ist das einfachste.
    Die Hashwert-Datei der hochgeladenen Bilder liegt lokal bei dir Zuhause auf der Platte und ist in kürzester Zeit durchsucht.

  • Also erstmal nen dickes fettes DANKESCHÖN für die Antworten (insbesondere an Andy für die gut verständliche Erklärung)!!!
    Was MD5 und so weiter angeht werde ich mich wohl mal schlau machen müssen misterspeed. Allerdings versteh mich nicht ganz falsch, aber ich fühle mich nen bischen naja...als ob ich ins ganz eiskalte Wasser springe, da ich nichtmal so genau weiss/wusste was MD5 überhaupt ist ^^ . Ich war schon happy als PixelSearch und ImageSearch bei mir funktioniert hatte. ^^
    Kann mir gut vorstellen, dass das eher suboptimal ist, aber naja iwo muss ich ja anfangen und das mit den Serachfunktionen habe ich glaube ich zumindest so halbwegs verstanden bzw. kann damit halbwegs umgehen. Was ihr hier schreibt ist schon iwie hammer. Das ist als wenn ihr 20 Jahe Latein sprechen würdet und mir ratet direkt das grosse Latinum zu versuchen. :rofl:

    Warum genau ist eig *.bmp das beste Format? Ist *.png nicht sogar qualitativ besser? Was den Rest angeht muss ich erstmal sacken lassen. :D


    Was mich allerdings trotzdem noch interessiert ist warum die Scripte seperat bei mir 1a funktionieren, sie jedoch wenn ich sie in Kombination verwende nicht "richtig" laufen wollen.
    Habe ich in meinem Script nen Fehler. Rein von dem Script her müsste es eig so laufen oder?
    Was mir auch schon aufgefallen ist......

    Das ImageSearchScript so wie oben angegeben läuft wie gesagt einwandfrei! Wenn ich aber mehrere If-Anweisungen in folge schreibe beispielsweise so:

    Spoiler anzeigen
    [autoit]

    #include <ImageSearch.au3>

    [/autoit] [autoit][/autoit] [autoit]

    HotKeySet("{ENTER}", "_StartSearch")
    HotKeySet("{ESC}", "_Exit")

    [/autoit] [autoit][/autoit] [autoit]

    $Bild1x1 = 0
    $Bild1y1 = 0
    $Bild2x1 = 0
    $Bild2y1 = 0
    $Bild3x1 = 0
    $Bild3y1 = 0
    $Bild4x1 = 0
    $Bild4y1 = 0
    $Bild5x1 = 0
    $Bild5y1 = 0
    $Bild6x1 = 0
    $Bild6y1 = 0
    $Bild7x1 = 0
    $Bild7y1 = 0
    $Bild8x1 = 0
    $Bild8y1 = 0
    $Bild9x1 = 0
    $Bild9y1 = 0

    [/autoit] [autoit][/autoit] [autoit]

    while 1
    sleep(50)
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _StartSearch()

    $result1 = _ImageSearchArea("Testbild1.bmp", 1, 0, 0, @DesktopWidth, @DesktopHeight, $Bild1x1, $Bild1y1, 0)
    $result2 = _ImageSearchArea("Testbild2.bmp", 1, 0, 0, @DesktopWidth, @DesktopHeight, $Bild2x1, $Bild2y1, 0)
    $result3 = _ImageSearchArea("Testbild3.bmp", 1, 0, 0, @DesktopWidth, @DesktopHeight, $Bild3x1, $Bild3y1, 0)
    $result4 = _ImageSearchArea("Testbild4.bmp", 1, 0, 0, @DesktopWidth, @DesktopHeight, $Bild4x1, $Bild4y1, 0)
    $result5 = _ImageSearchArea("Testbild5.bmp", 1, 0, 0, @DesktopWidth, @DesktopHeight, $Bild5x1, $Bild5y1, 0)
    $result6 = _ImageSearchArea("Testbild6.bmp", 1, 0, 0, @DesktopWidth, @DesktopHeight, $Bild6x1, $Bild6y1, 0)
    $result7 = _ImageSearchArea("Testbild7.bmp", 1, 0, 0, @DesktopWidth, @DesktopHeight, $Bild7x1, $Bild7y1, 0)
    $result8 = _ImageSearchArea("Testbild8.bmp", 1, 0, 0, @DesktopWidth, @DesktopHeight, $Bild8x1, $Bild8y1, 0)
    $result9 = _ImageSearchArea("Testbild9.bmp", 1, 0, 0, @DesktopWidth, @DesktopHeight, $Bild9x1, $Bild9y1, 0)

    If $result1 = 1 Then
    ConsoleWrite($result1 & " ist bereits in der Gallerie vorhanden!" & @CRLF)
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    If $result2 = 1 Then
    ConsoleWrite($result2 & " ist bereits in der Gallerie vorhanden!" & @CRLF)
    EndIf

    If $result3 = 1 Then
    ConsoleWrite($result3 & " ist bereits in der Gallerie vorhanden!" & @CRLF)
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    If $result4 = 1 Then
    ConsoleWrite($result4 & " ist bereits in der Gallerie vorhanden!" & @CRLF)
    EndIf

    If $result5 = 1 Then
    ConsoleWrite($result5 & " ist bereits in der Gallerie vorhanden!" & @CRLF)
    EndIf

    If $result6 = 1 Then
    ConsoleWrite($result6 & " ist bereits in der Gallerie vorhanden!" & @CRLF)
    EndIf

    If $result7 = 1 Then
    ConsoleWrite($result7 & " ist bereits in der Gallerie vorhanden!" & @CRLF)
    EndIf

    If $result8 = 1 Then
    ConsoleWrite($result8 & " ist bereits in der Gallerie vorhanden!" & @CRLF)
    EndIf

    If $result9 = 1 Then
    ConsoleWrite($result9 & " ist bereits in der Gallerie vorhanden!" & @CRLF)
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _Exit()
    Exit
    EndFunc

    [/autoit]


    Findet er mache Übereinstimmungen NICHT (als Bsp.: $result9), die er aber wiederum findet, sofern ich z.B. die ersten 8 If-Aweisungen zu Kommentaren mache. Das ist ein Punkt den ich so nicht ganz verstehe. Rein programmiertechnisch ist es für mich auf Anhieb mal unlogisch! Oder mache ich da einen Denkfehler?! Weil ich vermute, das es aus genau dem Grund auch nicht in der abgewandelten Version läuft. Also in Kombination mit dem anderen Script. Falls es nen Fehler in meiner Programmierung ist wüsste ich das gerne, da ich mir das dann in meinen Schädel zimmern muss, das es so nicht laufen kann. Eben für mein Vertändnis!


    Ansonsten muss ich sagen das mit dem Hashwert ist wohl die absolut perfekte Variante, auch wenn ich noch etwas ängstlich bin...hab 0 Plan davon, wie soetwas dann auszusehen hätte. ;)


    Ich hoffe das was du da geschrieben hast sind nicht alles nur Märchen Andy! :rofl: :rofl:

    2 Mal editiert, zuletzt von Chulio (5. Januar 2014 um 21:00)

  • Zitat

    Warum genau ist eig *.bmp das beste Format? Ist *.png nicht sogar qualitativ besser?

    Alles ist gut, was die ursprünglichen Daten nicht verändert...
    BMP ist nicht das "beste" sondern das einfachste Format! BMP ist deswegen gut, weil es eine 1:1-Darstellung der angezeigten Pixel ist.
    Das Dateiformat ist recht einfach, 54 Byte Dateiheader, in dem die Informationen zur Bitmap eingetragen werden, der Rest sind die "Pixel".
    Andere Dateiformate wie bspw. JPG komprimieren dein "Bild", so dass idR. die Pixel alle "verfälscht" werden. Einem Menschen ist das egal, weil die Unterschiede (hoffentlich) nicht sichtbar sind. Bei einer Suche nach Übereinstimmungen zweier JPG funktioniert das aber nicht, da die Daten infolge der Kompression völlig unterschiedlich sind.

    Zitat

    Falls es nen Fehler in meiner Programmierung ist wüsste ich das gerne

    ich sehe jedenfalls auf Anhieb keinen Fehler...

    Zitat

    Ansonsten muss ich sagen das mit dem Hashwert ist wohl die absolut perfekte Variante, auch wenn ich noch etwas ängstlich bin...hab 0 Plan davon, wie soetwas dann auszusehen hätte. ;)


    Schau mal in die crypt.au3 , dort sind Funktionen um ganz einfach einen Hash zu erstellen.
    Ein Hash ist nichts weiter als eine Prüfsumme.

    ciao
    Andy


    "Schlechtes Benehmen halten die Leute doch nur deswegen für eine Art Vorrecht, weil keiner ihnen aufs Maul haut." Klaus Kinski
    "Hint: Write comments after each line. So you can (better) see what your program does and what it not does. And we can see what you're thinking what your program does and we can point to the missunderstandings." A-Jay

    Wie man Fragen richtig stellt... Tutorial: Wie man Script-Fehler findet und beseitigt...X-Y-Problem

    Einmal editiert, zuletzt von Andy (6. Januar 2014 um 06:38)

  • Lieben dank. Übrigens Sollte mein Script, was ich als Lösung gepostet habe tatsächlich laufen. ich weiss nicht wie mir das passiert ist, aber ich hatte in meiner Version so viel hin und her getestet das ich nichtmal sicher bin woran es genau lag. Allerdings läuft es nun bei mir fehlerfrei.

    Ist wie andere Leute hier erwähnt habn sicherlich nicht die perfekte Lösung, aber wollte es dennoch anmerken, das das halt so laufen sollte, für den Fall das iwer auch sowas in der Art basteln möchte.
    Zu beachten wäre dabei allerdings wie an anderer Stelle auch schon erwähnt, das alle Bilder so mit ein und dem selben Tolleranzwert gesucht werden, was für ImageSearch eig eher weniger schön ist.
    War für mich allerdings trotzdem nett damit gebastelt zu haben. Für Einsteiger vermutlich die einfachste Lösung.

    Kann aber nun endgültig zu, da zum einen gelöst, und zum anderen ich mich dann wohl nun endlich an die Sache mit dem Hashwert machen kann. ;)
    Konnte einfach nicht anders, als erstmal mein Ding zum laufen zu bringen. Bekomme ne Kriese und kann fast nicht schlafen solange das bei mir nicht geht! :rofl:

    UND LIEBEN DANK NOCHMAL AN ALLE FÜR DIE HILFE!!!

  • PNG ist übrigens nicht qualitativ hochwertiger als BMP, sondern einfach nur effizienter und fortgeschrittener. PNG hat eine verlustfreie Komprimierung, somit gehen also auch hier keineder originalen Bilddaten verloren. Außerdem unterstützt PNG Transparenz über den Alphakanal.
    BMP hat dafür den Vorteil, dass es wohl das simpelste Bildformat ist, wie Andy bereits erklärt hat.