Koordinatenangaben vereinfachen

  • Hallo Forum
    Ist es möglich die Koordinatenangaben zu vereinfachen?
    Ich lese aus einer Textdatei den String "1132,546,1150,557".
    Normal müsste ich mit;

    Spoiler anzeigen


    $Bild = "1132,546,1150,557" ;als Ersatz für Textfile lesen
    $a_coord =StringSplit ($Bild, ",")
    $X= $a_coord[0]
    $Y= $a_coord[1]
    $x1= $a_coord[2]
    $y1 =$a_coord[3]
    _ScreenCapture_Capture($Ordner & "temp.bmp", $X, $Y, $x1, $y1, 1)


    den String aufsplittern, um anschließend einen Bildausschnitt zu speichern.
    Es währe es doch einfacher, anstatt „$X, $Y, $x1, $y1“ , gleich den String ($Bild) einzusetzen.
    Zb:
    _ScreenCapture_Capture($Ordner & "temp.bmp", [b]Execute($Bild)[/b], 1)
    Nur leider nimmt „Execute” nur den ersten Wert.
    Das ist schade, das würden die
    Zugriffe auf die Text-Datein reduzieren
    Array’s Größe erheblich reduzieren
    Und die Schreib und Übersichtlichkeit vereinfachen.

    Oder gibt es da eine Lösung? ?(

  • Für sowas gibt es funktionen:

    AutoIt
    _ownScreenCapture("1132,546,1150,557")
    
    
    Func _ownScreenCapture($Bild)
        local $ar=stringsplit($Bild,",",1+2)
        _ScreenCapture_Capture($Ordner & "temp.bmp",$Ord,$ar[0],$ar[1],$ar[2],$ar[3],1)
    EndFunc


    Ne datei einfach mit $array=_FileReadToArray(...) einlesen, dann kannst du einfach mit

    AutoIt
    for $i=0 to ubound($array)-1 step 1
        _ownScreenCapture($array[$i])
    next


    alles durchgehen

  • hallo Kanashius
    Danke für deine Antwort

    Aufsplitten in ein Array und in einer Schleife einlesen ist mir klar, bisher machte ich es auch so.
    Ist aber ein Umweg über ein Array und einer Schleife
    Aber genau daß wollte ich vermeiden.

    Einfacher währe es, daß die Variable ($Bild) direkt im Befehl interpretiert wird, als Ersatz für $ar[0],$ar[1],$ar[2],$ar[3].
    Execute($Bild) gibt aber leider nur den ersten Wert an den Befehl weiter und ignoriert den Rest.
    ps: Das Ganze ist nur eine Überlegung
    Schade
    Aber trotzdem Danke

  • ich verstehe dich nicht ganz.
    Du wirst immer 4 Koordinaten an eine Funktion übergeben müssen um einen Bildausschnitt zu capturen.

    Was soll daran vereinfacht werden???
    Selbst wenn du die Originale Funktion umschreiben würdest, damit SIe mit einem Array an Übergabeparametern auskommt,
    würdest Du weiterhin 4 Koordinaten übergeben und die Funktion muss weiterhin aus den 4 Koordinaten ein Capture machen.

    Da gibt es nix mehr zu optimieren oder zu verbessern ;)

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • Kann man so machen:

    [autoit]


    #Include <ScreenCapture.au3>
    $Ordner = @ScriptDir & "\"
    $Bild = "1132,546,1150,557" ;als Ersatz für Textfile lesen
    Execute('_ScreenCapture_Capture("' & $Ordner & 'temp.bmp",' & $Bild & ', 1)')

    [/autoit]

    Es ist aber schwachsinnig das so zu machen. Wie oben erwähnt schreibt man sich dafür einfach eine Hilfsfunktion, die den String aufsplittet und baut dort vorallem auch ein gescheites Errorhandling ein. Wenn du den String wie von mir gezeigt ungeprüft an Execute übergibst stürzt dein Script aufgrund eines Syntaxfehlers komplett ab wenn der String fehlerhaft sein sollte. Es ist fahrlässig externe Daten ungeprüft direkt zur ausführung zu bringen. Du sparst dir damit rein garnichts was die Performance anbelangt, hast dafür aber irgendwann sehr viel mehr Stress den Fehler zu finden wenn dein Script ohne brauchbare Fehlermeldung abstürzt.