[Gelöst] [GDI] Per Pixel Alpha in Screen



  • Hi.

    Ich habe jetzt ein (langes) Weilchen probiert mir ein Bild (.png) mit Alpha Werten auf den Screen zu bringen. (Ich will also durch mein Bild direkt auf die anderen Windows dahinter sehen und nicht nur auf den Inhalt, welcher sich in meinem Window befindet..)

    Wenn ich das ganze per SetLayeredWindowAttributes () in Verbindung mit WS_POPUP mache sieht das schon mal ganz anständig aus, ausser, dass ich mir da dann immernoch die Alpha Werte nicht übergeben werden.
    Also konkret fülle ich da zuerst mal das ganze Fenster mit Weiss und setze SetLayeredWindowAttributes auf Color Key für Weiss. Nur das, was wirklich weiss war wird dann auch entfernt, die Alpha Pixel werden dann aber so behandelt, als ob dahinter noch ein Weisses Pixel ist. (sprich es ist nicht mehr transparent zu dem Hintergrund).

    Dann habe ich auch mal direkt auf den Screnn gerendert (per GetDC (0) ). Das wiederum funktioniert dann zwar mit dem Alpha Wert, hinterlässt bei Bewegung aber das alte Bild. Und ich denke jetzt mal nicht, dass ich da Zugriff auf den Screen holen muss und das alles Wiederherstellen.

    Das sollte doch eigentlich recht einfach zu realisieren sein, oder nicht? - Selbst der Windows Zeiger wird mit Pixel Alpha gerendert.. 🙄
    (Man schaue sich mal den Schatten an, der der Mauszeiger. (Ausser das sind mehrere Samples.))

    Ich habe mir mal das Programm geladen, um zu sehen, ob es überhaupt möglich ist:
    http://www.codeproject.com/KB/GDI-plus/perpxalpha_sharp.aspx
    Und das funktioniert bei mir. Ich konnte mein Bild laden und es wurde richtig angezeigt. (Mit den Alpha Pixeln richtig geblendet..).

    Jemand ne Ahung, wie da der Standardweg mit GDI läuft?

    EDIT:
    Also es wird wohl irgendwie über UpdateLayeredWindow laufen müssen. Nur bekomme ich da jetzt immer 87 als Error Code zurück..

    EDIT2:
    Ja. Es hat an dem UpdateLayeredWindow gelegen, oder besser gesagt dem vorherigen SetLayeredWindowAttribute, was man nicht beides aufrufen darf.

    Danke dennoch für alle, die mir geholfen haben.. 🙂


Log in to reply