Beiträge von UEZ

    Und jährlich grüßt das Murmeltier...


    Wer Lust und Laune hat mit zu tippen, einfach https://www.kicktipp.de/autoit-bl kostenlos registrieren und lostippen. Die Teilnehmer vom letzten Kicktipp, die bis zum Ende durchgehalten haben, sind wieder automatisch dabei.


    Am 29.07.22 um 18:00 Uhr ( 2. Spieltag in Kicktipp) geht's mit den DFB Pokal Spielen los. Bonus Fragen nicht vergessen. ;)


    Die WM Katar 2022 Tipprunde werde ich im November separat erstellen!


    Was bekommt der Tipp Sieger? Ruhm und Ehre. :)


    Viel Spaß und viel Glück!

    Hi BugFix,


    ich habe lexer.errorlist.escape.sequences=1 in SciTEUser.properties hinzugefügt und das Skript test_color_out.au3 laufen lassen -> keine Farben in der Console, nur dies:

    Path2DLL... warum nicht als Einzeiler?

    AutoIt
    Func Path2DLL($sPath2DLL)
        Return $sPath2DLL ? $sPath2DLL : @ScriptDir & (@AutoItX64 ? "\_WebP_x64.dll" : "\_WebP_x86.dll")
    EndFunc   ;==>Path2DLL

    Danke, hab's geändert. :thumbup:


    Es gibt eine neue Version -> siehe Beitrag #1:

    • WebP_CreateWebPLossySimpleFromBitmap
    • WebP_CreateWebPLosslessSimpleFromBitmap

    hinzugefügt. Man kann jetzt Bilder als WebP speichern (keine Animationen!). "Advanced" Version mit mehr Einstellmöglichkeiten kommt noch...

    UEZ

    Klasse Arbeit!! :thumbup:

    Hast du die *.h-Files nach Freebasic transferiert und dann mit den *.lib Dateien gelinkt?

    Hi Andy,


    nur einige Teile von der decode.h. Die *.lib funzen nicht, musste die libwebp_x??.a nehmen. Primär wollte ich einfach die WebP Bilder in Autoit benutzen können und habe mich deshalb nur auf das Wesentliche beschränkt.

    Ob sich der Aufwand lohnt alle Funktion in die DLL zu packen, weiß ich noch nicht.


    Danke für dein Feedback.


    Off-Topic: dieses Jahr waren die Beiträge in der revision echt mau... :(

    Das Thema

    hat mich neugierig gemacht, und deshalb habe ich eine kleine DLL gebastelt, die WebP Bilder in GDI+ / GDI umwandelt, sodass man sie direkt in Autoit benutzen kann.

    Das Archiv beinhaltet u.a. die DLLs (x86 / x64), die zum Umwandeln benötigt werden.


    UDF:


    Beispiel 1:


    Beispiel 2:


    Beispiel 3:


    Beispiel 4:


    Beispiel 5:


    WebP Advanced Encoder GUI.au3:



    Bitte mal testen, ob's bei euch auch funzt.


    Btw, die DLL ist in Freebasic geschrieben. :)


    Mehr zum Thema WebP API kann hier eingesehen werden: https://developers.google.com/speed/webp/docs/api.

    Glückwunsch an Mars für die beste Komprimierung:thumbup:

    AspirinJunkie für die auch sehr gute und sehr schnelle Komprimierung :thumbup:


    Hier mal das Resultat mit externen Tools / DLLs:

    Size File Ratio %
    6105 original.txt 0.00%
    3552 original.png 41.82%
    2875 original_WinAPI_XPRESS_HUFF.bin 52.91%
    2803 original_lzma2.7z 54.09%
    2776 original.rar 54.53%
    2626 original_bzip2.7z 56.99%
    2492 original_ppmd.7z 59.18%

    Da ich nicht das Rad neu erfinden wollte, denn seit es Computer gibt, wird an der Komprimierung geforscht, habe ich mich zu dieser Lösung entschieden, die aber laut den Regeln nicht erlaubt ist. Deshalb poste ich hier den Code direkt:

    Das Resultat auf meinem Notebook:


    In meinem Freebasic Programm "FB File2Bas Code Generator", das Pendant zu "File to Base64 String Code Generator", benutze ich u.a. ein Build-in LZMAT Kompressionsalgorithmus, aber wie Andy bereits geschrieben hat, wollte ich den Code nicht zu Autoit portieren, wäre aber Interessant gewesen, da die Portierung, denke ich zumindest, nicht ganz einfach ist.

    Coole Analyse Andy ! Die Tatsache der Spiegelung ist definitiv ein Booster bezgl. Performance (keine Impfung :P ). Mir kam intuitiv die Rekursion als Lösung in den Kopf, aber das Ganze grafisch darzustellen, war mit nicht eingefallen.

    Und RegEx ist langsamer als die StringSplit Funktion.


    Benchmark nach der Reihenfolge der Beiträge:

    Rekursionen sind i.d.R. einfacher zu implementieren -> kürzerer Code, aber langsamer.

    Mal was anderes...


    Hier mein Lösungsvorschlag:

    Das Hauptskript soll nur Daten von verschiedenen Quellen einsammeln und diese werden dann in einem anderen Skript verarbeitet.

    In Freebasic kann man den Pointer von einem Array übergeben und somit direkt in den Speicher schreiben. In Autoit, soweit ich weiß, geht das leider nicht. Falls die Daten immer den gleichen Typ haben, könnte man auch eine Struct anstelle eines Arrays benutzen und den Pointer zur Struct übergeben.

    Ich vermute, dass bei dieser Aktion (AdlibRegister) der Speicher intern kopiert wird und somit die Änderungen des Arrays nicht aktualisiert werden.


    Dies funzt:

    AutoIt
    While True
        Sleep(50)
        _FillArray($aData)
        _Register_Array($aData, 50)
        _Run()
    WEnd