2010-04-28 9 views
8

Ich möchte ein Layersystem in meiner Anwendung implementieren und dachte darüber nach, eine Reihe transparenter Bitmaps zu erstellen, Inhalte hinzuzufügen und sie dann übereinander zu blättern. Wie kann dies geschehen, ohne jedes Pixel auf (0,0 , 0,0). Ich benutze Pure win32, nicht MFC, danke.Erstellen einer transparenten Bitmap mit GDI?

Antwort

10

Was meinst du mit transparent?

Wenn Sie nach partieller (zu voller) Transparenz suchen, dann ist AlphaBlend die GDI-API zu verwenden. Das Laden von Bitmaps mit Alpha ist knifflig - Das einzige Format, das die Basis Windows API zum Laden von Bitmaps mit Alpha unterstützt, ist eine 32bpp .BMP Datei mit einem Alpha Kanal in den oberen 8 Bits jedes Bytes - und die unteren Bytes sollten vormultipliziert werden.

Es ist möglich, GDI + zu verwenden, um eine Vielzahl von Bildformaten mit Alpha zu laden - PNG ist wahrscheinlich das Beste, und blit auf eine 32bpp DIBSection, so dass Sie AlphaBlend und plain-alte GDI-Funktionen verwenden können.

Wenn Sie eine einfache Transparenzmaske anstelle eines vollständigen Alphakanals wünschen, können Sie TransparentBlt zusammen mit einem Farbschlüssel zum Ausblenden von Bereichen einer Bitmap beim Blitzen verwenden.

-1

GDI unterstützt keine Transparenz in Bitmaps und im Allgemeinen. Erwägen Sie die Verwendung von GDI+.

+0

Es sortof - es hat Unterstützung für die transparente Mischung von einem Bitmap auf ein anderes, mit Alpha-Komponenten in der Bitmap durch AlphaBlend. Es gibt auch die ungeraden Erweiterungen, um Aero in Fenstern zu unterstützen, die auch zählen könnten. Mit dem allgemeinen Fall hast du recht. –

+0

Es gibt auch TransparentBlt, aber bei Verwendung von 32-Bit-Bildern (z. B. solche mit Transparenz) ist AlphaBlend der richtige Weg. – dlanod

Verwandte Themen