Pixelsearch Funktion von Autoit in Java

  • Hallo Liebe Autoit-Gemeinde,

    ich bin jetzt schon seit fast über einem Jahr stolz darauf Autoit (einigermaßen) Bedienen zu können. Durch den umstand dass ich Berufsbedingt eine andere Sprache lernen muss (java) dachte ich mir dass es nicht schlecht wäre einige Autoitfunktionen in java zu schreiben um Java mal kennenzulernen und nebenbei ein Grundaufbau der bekannten funktionen aufzubauen. Nun habe ich es geschafft die PixelSearch- Funktion in Java zu schreiben nur stellte ich im direktvergleich fest dass Autoit dabei wesentlich schneller ist. Da ich natürlich bestrebt bin meine Java-Funktion ebensoschnell oder mindestens ähnlich so schnell zu optimieren wäre es schön wenn ich dies irgendwo nachschauen kann.

    Große Rede kurzer Sinn: Wo kann ich den Quellcode von Pixelsearch/ Autoiteigenen-Funktionen nachschauen?

    Viele Grüße Pecadis

    3 Mal editiert, zuletzt von Pecadis (28. Oktober 2010 um 10:43)

  • Ok Problem hab ich gelöst das Java-Pixelsearch ist nun genauso schnell wie Autoit-Pixelsearch. Falls jemand interesse hat habe ich den Javacode im folgenden mal drin ;)


  • Das solltest du in ein Forum posten, wo es auch um Java geht. Oder denkst du, wenn einer das sucht, sucht der in einem Forum wo es um AutoIt geht??? Wenn du einen BMW fährst, suchst du doch auch nicht in einem Opel-Forum.

    • Offizieller Beitrag

    So, nun kannst du ja versuchen einen optimierten Such-Alghoritmus zu finden. :D
    Im Moment qüalst du dich suchend von links oben nach rechts unten. Im ungünstigsten Fall ist das gesuchte Pixel rechts unten. ;)
    Kannst dich ja z.B. mal an einer Bubble-Sort ähnlichen Routine versuchen. Und dann testen wie die Performance der Varianten aussieht.

    Aber mobi hat schon recht: in H&Ü hat der Thread nix zu suchen - ich schiebe mal nach OT.

  • Hi,
    ggf gibt es für Java ähnlich wie für C++ Bibliotheken für die Verwendung von SSE-Befehlen. Da man so 4 Pixel auf einmal testen kann, beschleunigt sich die Suche erheblich (ca. Faktor 3).
    Aber gerade beim Testen sollte man aufpassen! Mitnichten wird "immer" von oben links nach unten rechts durchsucht! Je nachdem, wie die Bitmaps geladen werden(bzw abgespeichert sind, d.h. Bottom-up oder Top-down) wird z.B. zu Testzwecken bei einer 1000x1000 Bitmap ein Pixel an der Position 5,5 gesucht und der Programmierer ist todtraurig, wenn sein Programm vermeintlich "langsam" ist. In Wirklichkeit wurden aber (da bottom-up) 1000x995 Pixel durchsucht....
    Im umgekehrten Fall gilt das natürlich auch. Man sucht ein Pixel an Positiom 995,1000 und freut sich, dass der Algorithmus sauschnell ist, aber tatsächlich wurden statt 995000 Pixel nur 5000 Pixel durchsucht.
    Wer die "langsamen" API-Funktionen Getpixel/Setpixel verwendet, muss sich keine Gedanken machen, da dort "automatisch" umgerechnet wird. Unter anderem deswegen sind richtig schnelle Suchfunktionen nur mit entsprechenden Compileroptionen machbar. Oder man verwendet z.B. in AutoIt einen integrierten Assembler *husthust* und beschleunigt die PixelSuche um mehrere Faktoren....