Pixelsearch

  • Sorry das ich euch schon wieder belästige ;)
    Ich bin dabei ein kleines Skript zu schreiben, welches in einem bestimmten Bereich überprüfen soll ob
    dort eine Grafik fertig geladen ist.
    Da die Statistiken viele Schwarztöne enthalten wollte ich mit Pixelsearch überprüfen ob dort
    eine Mögliche Farbform von Schwarz kommt (Shader).

    Quellcode wie folgt:

    [autoit]

    While True
    If PixelSearch( 263, 497, 1113, 894, "0x000000", 100) Then
    MsgBox(0, "Farbe", "Farbe gefunden")
    Else
    MsgBox(0, "Farbe", "Farbe nicht gefunden")
    Sleep(10000)
    EndIf
    WEnd

    [/autoit]

    Problem ist obwohl die Grafik nach ~20 Sekunden geladen ist wird auch nach 40 und länger Sekunden immer noch
    ausgegeben das die Farbe nicht gefunden wird.
    Bin ich zu blöd für die While-Schleife?^^

    Lieben Gruß

    2 Mal editiert, zuletzt von dRoZ (22. August 2011 um 07:57)

  • Vielleicht geht es so?

    [autoit]

    While True
    If PixelSearch( 263, 497, 1113, 894, 0x000000, 100) Then
    MsgBox(0, "Farbe", "Farbe gefunden")
    Exitloop
    Else
    MsgBox(0, "Farbe", "Farbe nicht gefunden")
    Sleep(10000)
    EndIf
    WEnd

    [/autoit]
  • Die Bedingung in der If-Abfrage dürfte so immer falsch sein, da PixelSearch keine booleschen Werte zurückgibt und es sonst keine Bedingung gibt.

    Ich hätte das so geschrieben:

    [autoit]


    While True
    If isArray(PixelSearch( 263, 497, 1113, 894, 0x000000, 100)) Then
    MsgBox(0, "Farbe", "Farbe gefunden")
    Exitloop
    Else
    MsgBox(0, "Farbe", "Farbe nicht gefunden")
    EndIf
    Sleep(10)
    WEnd

    [/autoit]


    Hoffe es funktioniert so.

    TheLuBu: Es macht an sich keinen Unterschied, ob da ein ExitLoop drin ist oder nicht - die MessageBox mit "Farbe gefunden" hätte trotzdem auftauchen müssen.

    Damit der Prozessor nicht anfängt zu kochen hab ich noch ein Sleep in die While-Schleife eingebaut.

    Gruß stay

  • [autoit]

    $grau = PixelSearch($x,$y,$x2,$y2,0x636363)
    if $grau = Not @error Then
    Do
    MsgBox(64,"info","Farbe gefunden !")
    Until Not @error
    Else
    MsgBox(64,"info","Farbe nicht gefunden !",4)
    EndIf

    [/autoit]

    oder wenn die farbsuche noch genauer soll sein, dann so :

    [autoit]

    Do
    $coord1 = PixelSearch( 906,536, 88,23, 0x676A7E, 2)
    If Not @error Then
    $coord = PixelSearch( $coord1[0] - 20 , $coord1[1] - 20, $coord1[0] + 20, $coord1[1] + 20, 0xFCFECF, 15)
    If Not @error Then
    MouseMove($coord[0], $coord[1], 0)
    EndIf
    EndIf
    Until Not @error

    [/autoit]

    3 Mal editiert, zuletzt von pestomitketchup (19. August 2011 um 18:08)


  • Danke, der Quellcode hat mir weiter geholfen ;)
    Musste nochmal etwas angepasst werden, arbeitet nun aber tadellos! :)