Format für GuiCtrlCreateAvi()

  • Hallo,

    ich habe festgestellt, dass ein animiertes gif, welches man in einer GUI via IE.au3 (embedded) anzeigen lässt, je nach Größe (500 KB) und Prozessor so viel CPU-Last zieht (ansteigend bis 100%), das das gesamte Skript ins Stocken gerät. Das passiert übrigens auch wenn man die Seite ganz normal im Internet-Explorer anzeigen lässt, ohne AutoIt (einfach nur eine HTML-Seite mit dem animated.gif).

    Ich denke eine Lösung wäre das gif in eine avi-Dtei umzuwandeln. Mit einem Programm namens "Super" geht das (in alle Formate mit allen erdenklichen Einstellungen) - aber ich finde nicht die richtigen Einstellungen. GuiCtrlCreateAvi() meldet immer zurück, dass es die Datei nicht abspielen kann. In diesem Thread hier hat es mal jemand geschafft:

    [ offen ] Animierte Gif´s ?

    Ich habe sein gif/avi auch zum Laufen gebracht:

    [autoit]


    #include "AVIConstants.au3"
    GuiCtrlCreateAvi("Mignon.avi",0, 10, 10, 32, 32, $ACS_AUTOPLAY)

    [/autoit]

    Aber meines will einfach nicht. Kennt jemand das avi-Format, welches Autoit benötigt, oder kennt jemand noch eine unkomplizierte Möglichkeit ohne IE.au3 und ohne händisch zu registrierende .dlls, eine animierte gif Datei abzuspielen?

    Vielen Dank für Tips!
    Trainer

    3 Mal editiert, zuletzt von ip_trainer (8. April 2011 um 14:09)

  • 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. ;)

  • Hi Schnuffel,

    das scheint genau das richtige zu sein!

    Ich hab's runtergeladen, bekomme aber kein einziges Beispiel zum Laufen :S ... Es kommt immer (mindestens) ERROR: FileOpen() [built-in] called with wrong number of args.
    Ich sehe nur leider den Fehler nicht. Naja, vielleicht brauche ich auch mal ne Pause. Ich schau's mir später noch mal an.

    Trotzdem schon mal vielen Dank für den Link!

    Trainer

  • am Besten die aktuellen Demos von trancexx runterladen und inspirieren lassen ;)
    http://download.origo.ethz.ch/gif-animation/…ation_2.1.1.zip

    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. ;)

  • Hi,

    danke noch mal für den Hint! Das war allerdings genau das, was ich runtergeladen hatte.

    Ich habe es jetzt zum Laufen gebracht, allerdings muss ich in der GIFAnimation.au3 die Zeilen

    199 - 204

    Spoiler anzeigen
    [autoit]


    If @error Then
    Local $hGIFFile = FileOpen($vData)
    $vData = FileRead($hGIFFile)
    FileClose($hGIFFile)
    $pBitmap = _GIF_CreateBitmapFromBinaryImage($hGDIP, $hMemGlobal, $vData, $iWidth, $iHeight)
    EndIf

    [/autoit]


    und 409 - 418

    Spoiler anzeigen
    [autoit]


    If @error Then ; try some more options
    Local $hGIFFile = FileOpen($vData)
    $vData = FileRead($hGIFFile)
    FileClose($hGIFFile)
    $pGIF = _GIF_Create_pGIF($vData, $iWidthDef, $iHeightDef, $hGIFControl, $iLeft, $iTop, $iForcedARGB)
    If @error Then ; finally maybe it's GIF content passed as string
    $pGIF = _GIF_Create_pGIF(Binary($vGIF), $iWidthDef, $iHeightDef, $hGIFControl, $iLeft, $iTop, $iForcedARGB)
    If @error Then Return SetError(1, @extended = True, 0) ; Nothing worked, Invalid input or Gdip failure.
    EndIf
    EndIf

    [/autoit]


    auskommentieren, sonst bekomme ich das Beispiel "Example1..." nicht zum Laufen.

    Also nochmal vielen Dank!
    Trainer

  • eine Bitte noch.
    Wenn Deine Anfrage gelöst ist, dann setze bitte deinen ersten Thread auf den dem entsprechenden Status.

    Danke Dir und freut mich wenn es geklappt hat :D

    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. ;)

  • Hallo zusammen,

    habe den Thread noch mal auf offen gesetzt. Das Handlig der GIFAnimation.au3 klappt soweit wunderbar. Das Abspielen eines großen gifs ist - prinzipiell - nun kein Problem mehr. Und diese UDF ist echt der Hammer :P ...

    Dennoch bleibt ein kleiner Wermutstropfen: beim Strart eines relativ großen GIFs entsteht immer noch eine Timeout, je nach Geschwindigkeit (oder Anzahl ?) der CPU(s). Auf meinem Server z.B. (Athlon, 1800MHz, 512MB) dauert es gut über zwei Sekunden, bis mein GIF (514 Kb) letztendlich anläuft. Auf meinem stärkern Arbeitsrechner geht es hingegen sofort los. Danach geht die Prozessorlast zwar runter (und bleibt auch dort), was einen reibungslosen Ablauf des restlichen Programms gewährleistet, aber meine Animation ist genau auf die Ansteuerung eines mechanischen Vorgangs abgestimmt (Motoransteuerung mit Endlagenschalter) - und da ist diese Verzögerung natürlich doof :rolleyes: ...

    Also: falls doch jemand die korrekten Parameter für das Erzeugen eines GUI-AVIs kennt (oder weiß wie man es rausfinden kann), dann wäre das klasse!

    Gruß
    Trainer

    Einmal editiert, zuletzt von ip_trainer (8. April 2011 um 12:25)

  • Hallo,

    also, mit VirtualDub hat es jetzt geklappt. Einfach Video-Datei öffen (öffnet auch GIFs) --> als AVI speichern und fertig. Die AVIs sind zwar "etwas" größer jetzt (Faktor 100) als die GIFs, aber dafür läuft alles ohne Latenzen, auch auf langsamen Rechnern...

    Hier mein funktionierender Beispiel-Code:

    [autoit]

    #include <GUIConstantsEx.au3>
    #include <AVIConstants.au3>

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

    $main_gui = GUICreate("AVI-TEST", 500, 500, 100,100)
    GUISetState(@SW_SHOW)

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

    $avi = GUICtrlCreateAvi("DATEINAME.avi", 0, 34,40, "", "", $ACS_NONTRANSPARENT)
    GUICtrlSetState($avi, $GUI_AVISTART)

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

    Sleep(5000)

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

    GUICtrlSetState($avi, $GUI_AVICLOSE)

    [/autoit]

    Gruß
    Trainer