Hintergrundfarbe einer GDIplus Grafik durchsichtig machen oder Bild als Hintergrund

  • Hallo,
    Name22 hat da ein paar tolle Scripte geschrieben.
    Unter anderem dieses :GDI+ Circle Collision v2.0.au3 (https://autoit.de/index.php?page=Thread&threadID=26628 )
    Ist es möglich, darin den Hintergrund durchsichtig zu machen oder anstatt des weißen Hinterdrundes ein Bild eigener Wahl zu verwenden?
    Leider habe ich noch nicht so ganz verstanden, was GDIplus da anstellt, denn eigentlich müsste man doch irgendwo einfach die Hintergrundfarbe auf durchsichtig einstellen können (so etwa 0x00FFFFFF).
    Die Forensuche nach Hintergrundbild (hab immer nur was für GUI gefunden) oder Transparenz half mir nicht weiter.
    Ich befürchte ja, dass es ganz einfach ist und ich einfach zu d... bin.

    Kann mir da bitte mal jemand auf die Sprünge helfen?

  • Zitat

    Name22 hat da ein paar tolle Scripte geschrieben.


    Danke :D.

    Zitat

    anstatt des weißen Hinterdrundes ein Bild eigener Wahl zu verwenden?


    Das ist relativ einfach, aber könnte ggf. die Performance bei größeren Auflösungen einschränken.
    Du musst dazu lediglich diese Zeile:

    [autoit]

    _GDIPlus_GraphicsClear($hGraphics, $iARGB_BG)

    [/autoit]

    (in der die Grafik mit der Hintergrundfarbe gefüllt wird) ersetzen, durch eine Funktion die ein Bild auf die Grafik zeichnet (wenn das Bild zum Teil transparent ist, dann muss GraphicsClear trotzdem angewendet werden). Also zum Beispiel diese hier:

    [autoit]

    _GDIPlus_GraphicsDrawImageRect

    [/autoit]

    Im Hilfeartikel der Funktion ist beschrieben wie man sie verwendet inkl. Beispiel. ;)

    Zitat

    Ist es möglich, darin den Hintergrund durchsichtig


    Das ist schon möglich. Allerdings ist es nicht so einfach wie der zweite Teil deiner Frage...
    GDI+ kann sehr wohl die Grafik komplett transparent färben, aber das siehst du nicht weil die GUI das nicht macht. Ein Standardfenster nimmt keine Transparenten Farbtöne an (deswegen wird bei GUISetBKColor auch nur ein RGB Farbwert (ohne Alpha-Channel) und kein ARGB Farbwert (mit Alpha-Channel) angegeben).
    Die GUI bekommst du transparent, indem du ein mehrschichtiges Fenster verwendest (erweiterter Stil: $WS_EX_LAYERED) und dieses mit der WinAPI Funktion

    [autoit]

    _WinAPI_UpdateLayeredWindow

    [/autoit]

    bemalst anstatt mit BitBlt.
    Wie genau das funktioniert siehst du unter anderem in diesem Thread: https://autoit.de/index.php?page=Thread&postID=211239. (Auf WinXP funktioniert das ganze leider nicht so gut...)

  • Erst mal vielen Dank, name22, und herzlichen Glückwunsch nachträglich (hab ich beim schmökern im Forum noch entdeckt..)
    Fall 1(Hintergrund) fällt leider flach, da es einfach zu lange dauert, immer wieder das jpg hineinzuschreiben.
    Da bleibt mir nur, eine $WS_EX_LAYERED GUI zu verwenden. Habe leider nur XP, aber vielleicht funzt es ja trotzdem.
    Muss mich da aber erstmal reinarbeiten. Das sieht ziemlich komplex aus.