Bilder Transparent laden

  • Hallo zusammen,
    wie kann ich aus PNG, PSD etc den Transparentkanal in AVISynth laden?

    Denn die Funktion ImageReader ließt Bilder nur im RGB24 Modus und da geht das Transparent verloren. Ich lese zwar etwas von ebmp (RGB32), jedoch versteh ich das nicht.

    Der Transparentkanal soll als Alpha-Maske verwendet werden.

    Habt Ihr einen Tip? Oder ein Plugin?

    Danke

  • EBMP ist eigentlich relativ einfach zu verstehen: Die AviSynth-Entwickler haben das Windows-BMP-Format so erweitert, dass es nicht nur RGB- sondern auch YUV-Daten aufbewahren kann; das unterstützen die Windows-internen Funktionen wiederum natürlich nicht...

    Ich glaube, mit der Frage sollte man sich wohl eher an die AviSynth- und DevIL-Entwickler im englischen Forum wenden. Denn nur damit kann AviSynth andere Formate importieren; ohne DevIL könnte ich nur vorschlagen, sich ein Programm zu suchen, welches 32-Bit-Windows-BMPs (also mit Transparenz- = Alpha-Kanal, RGBA) schreiben kann.

    Ich bin mir nicht sicher, ob das überhaupt ein Programm unterstützt; meine erste Vermutung würde wahrscheinlich zu "Image Alchemy", einem Kommandozeilen-Tool, tendieren. Ansonsten wüsste ich vom Targa-Format (TGA), dass es RGBA unterstützt, bei BMP bin ich mir über die Verbreitung dieses Unterformates nicht so sicher...

    Das Suchen in Google gestaltet sich hier gar nicht so einfach, es gibt viel zu viele nicht ganz relevante Treffer.

  • Zitat von WarpEnterprises

    Gibt's doch alles schon:
    Mit CoronaSource aus ImageSequence.DLL
    Geht prima (verwende es z.B.fürs rendern in povray, Ausgabe in PNG)

    Vielen Dank WarpEnterprises, ich hatte es zwar schon drauf, aber nie verwendet. Dachte immer es wurde durch die Interne Function ( ImageReader ) ersetzt. Bei meinen ersten Tests funktionierts sehr gut. Schon alleine die Anzeige: Farbraum RGB32, stiegen in mir Glücksgefühle auf.

    Bilder gleich mit Tansparent laden zu können... UI, da muß ich ja jetzt sooo einiges Umschreiben.

    Jetzt muß nur noch eine DLL rauskommen, die unterschiedliche Bildgrößen laden kann und diese dann richtig anpasst. ( Width=640, Height=480, Resize=true) oder ( Width=640, Height=480, Resize=false, Allign=middle)

    Und dann lieber WarpEnterprises würdest Du mich so richtig "Warpen" :)

    Danke und Gruß

    @All
    So würde das Script aussehen:

    PHP
    LoadPlugin("....\imagesequence.dll")
    video = AviSource("....\Nicolai1.avi",false).ConvertToRGB32()
    frame=CoronaSequence("....\Holiday1.png",start=0,stop=0,fps=25,textmode=0,posx=0,posy=0).Loop(Framecount(video))
    Layer(video,frame,op="add",level=255,x=0,y=0)
  • Kannst du etwas genauer beschreiben, wozu die input-Bilder verschieden gross sein müssen bzw. wieso sie es sind?

    Die DLL so zu machen, dass sie ein FIXES Format ausgibt und die Bilder darauf plaziert (meinetwegen auch zentriert,...) ist relativ leicht.

    Ein Resize passt mir aber nicht recht ins Konzept und die vorhandenen AviSynth-resizer dynamisch anzuzapfen kann ich dzt. auch nicht (obwohl es wahrscheinlich gar nicht mal so schwer ist.)

    Übrigens, falls du es nicht ohnehin weisst: PNG unterstützt auch teilweise Transparenz (d.h. einen ECHTEN alpha-Kanal, nicht nur eine alpha-Farbe wie GIF)

  • Zitat von WarpEnterprises

    Kannst du etwas genauer beschreiben, wozu die input-Bilder verschieden gross sein müssen bzw. wieso sie es sind?


    Wenn ich zum Beispiel eine SlideShow zaubern möchte und die Bilder in Unterschiedlichen Größen vorhanden sind. Bis jetzt mußte ich Sie alle Vorher anpassen.

    Zitat von WarpEnterprises

    Die DLL so zu machen, dass sie ein FIXES Format ausgibt und die Bilder darauf plaziert (meinetwegen auch zentriert,...) ist relativ leicht.
    Ein Resize passt mir aber nicht recht ins Konzept und die vorhandenen AviSynth-resizer dynamisch anzuzapfen kann ich dzt. auch nicht (obwohl es wahrscheinlich gar nicht mal so schwer ist.)


    FIXES // Allign : Das währe Schön.
    Resize: wenn es zu schwer ist, versteh ich das 100%

    Zitat von WarpEnterprises

    Übrigens, falls du es nicht ohnehin weisst: PNG unterstützt auch teilweise Transparenz (d.h. einen ECHTEN alpha-Kanal, nicht nur eine alpha-Farbe wie GIF)


    Das wußte ich, siehe Schatten vom oberen Bild. :)

  • Nachtrag: manchmal denkt man zu kompliziert!
    Mit ScriptClip kannst du jetzt schon genau das machen:

    Code
    #ScriptClip braucht irgendein Basis-Clip. Muss genau den richtigen Zieltyp/Grösse haben
    blankclip(width=400,height=200,pixel_type="RGB24")
    
    
    #jetzt CoronaSequence mit ScriptClip JEDEN FRAME aufrufen.
    #der Filename des Bildes muss mit String und current_frame zusammengesetzt werden
    #danach resizen - fertig. Und egal, wie gross das Bild ist.
    #der CoronaSource ist die Grösse auch egal, da für jedes Bild neu initialisiert wird.
    scriptclip("""coronasequence("d:\avitest\img\puzzle"+string(current_frame,"%03.0f")+".bmp",0,205,25).bilinearresize(400,200)""")

    Ist natürlich wesentlich langsamer.
    Die """ sind dazu gut, damit IM STRING auch " verwendet werden kann.
    Ich werde die andere Möglichkeit trotzdem noch einbauen, aber sag mir, ob du auch mit dieser Lösung zurechtkommst.

  • Lieber Warpi :)
    leider habe ich über Deinen Beitrag keine Benachrichtung erhalten. Jetzt ( bei meiner Monatlichen Durchsicht) sehe ich ihn ja.

    mit ScriptClip habe ich noch NIE gearbeitet.. wau, er kann es ja echt laden. Muß ich mir aber mal genauer ansehen. Dein script funktioniert schon, jedoch wird das bild auf die angegebene width,height geresizt. Mal sehn, ob ich da etwas drehn kann.

    Ich hoffe Du findest die Zeit, die andere Möglichkeit in das Plugin einzubauen.

    Gruß Katjarella.

  • und ich hab mich schon gewundert, "wo du bleibst"...

    Das gute am ScriptClip ist, dass ICH nichts machen muss. :lol:

    Du kannst natürlich auch Addborders,... verwenden, um zu zentrieren.
    oder mein Zoom-Plugin zum verschieben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!