Bitmapobjekte
Anmerkung
Für Apps unter Windows 10 empfehlen wir die Verwendung von Windows.UI.Composition-APIs anstelle von DirectComposition. Weitere Informationen finden Sie unter Modernisieren Ihrer Desktop-App mithilfe der visuellen Ebene.
Microsoft DirectComposition ist ein Bitmapkomositingmodul. Es ermöglicht Anwendungsentwicklern, mehrere Bitmaps zu kombinieren und auf verschiedene Arten zu bearbeiten, um interessante visuelle Effekte und Animationen in einer Anwendungs-UI zu erzielen. In diesem Thema werden die Typen von Bitmapinhalten beschrieben, die DirectComposition unterstützt.
-
Bitmapinhalt
- Videospeicherbitmaps
- von Fensterbitmaps
- Zuordnen von Bitmapinhalten zu einem visuellen
- Alphakanal-
- Verwandte Themen
Bitmapinhalt
Anwendungen stellen DirectComposition mit dem Bitmapinhalt bereit, der erstellt und animiert werden kann, indem visuelle Objekte erstellt und anschließend die Content-Eigenschaft dieser Objekte festgelegt wird. DirectComposition bietet keine Rasterungsdienste an. Eine Anwendung muss eine andere softwarebasierte oder hardwarebeschleunigte Rasterungsbibliothek wie Direct2D- oder Direct3D- verwenden, um die bitmaps aufzufüllen, die zusammengesetzt werden sollen. Nach dem Verfassen übergibt DirectComposition zusammengesetzten Bitmapinhalt an Desktop Window Manager (DWM) zum Rendern auf dem Bildschirm.
Unterstützte Typen von Bitmapinhalten Microsoft DirectComposition unterstützt die folgenden Bitmaptypen:
- Videospeicherbitmaps
- von Fensterbitmaps
Videospeicherbitmaps
Eine Videospeicherbitmap wird in der Hardware mithilfe von Microsoft DirectX-Methoden gerastert (einschließlich des DX-zu-GDI-Interoperabilitätsmodells). Es wird durch prozessübergreifende gemeinsam genutzte Oberflächen unterstützt, die für die aufrufende Anwendung und für DirectComposition sichtbar sind. Eine Videospeicherbitmap unterliegt nicht dem Zerreißen, da die Anwendung nur aus den Oberflächen lesen kann, aus denen DirectComposition-Texturen stammen.
Videoinhalte
Anwendungen können DirectComposition verwenden, um Videoframes zu verfassen, die windowslose DirectX-Swapchains verwenden, die an eine DirectComposition-Oberfläche gebunden sind. Konzeptionell behandelt DirectComposition Videoinhalte als Sequenz von Bitmaps. DirectComposition bietet keine Möglichkeit, Videoframes darzustellen.
DirectComposition unterstützt Fensterlose Swapchains ohne DirectX, d. h. Swapchains, die nicht an ein bestimmtes Fenster gebunden sind, und ermöglicht es zwei verschiedenen Anwendungen, fensterlose Swapchains über Prozessgrenzen hinweg zu teilen. Das Freigeben von Fensterlosen Swapchains ermöglicht Videoszenarien, in denen die Swapchain in einem Prozess erstellt wird und in einem zweiten Prozess mit DirectComposition verwendet wird. Fensterlose Swapchains werden mithilfe der IDXGIFactory2::CreateSwapChainForCompositionSurface-Methode erstellt.
Weitere Informationen zu DirectX-Swapchains finden Sie unter DXGI Overview.
Stereoinhalt
Konzeptionell besteht eine Stereo-Swapchain aus Microsoft DirectX Graphics Infrastructure (DXGI)-Oberflächen, die die linken und rechten Kanäle für Stereo-3D-Inhalte darstellen. Wenn eine Stereo-Swapchain als Bitmapressource für ein visuelles Element verwendet wird, erstellt DirectComposition in Stereo. Alle Nicht-Stereo-Inhalte (Mono-Inhalte) werden als identische Links- und Rechtskanalinhalte betrachtet; d. h. derselbe Bitmapinhalt wird für beide Kanäle verwendet. DirectComposition verfasst alle linken Inhalte und alle richtigen Inhalte separat. Wenn das Anzeigegerät nicht stereofähig ist, behandelt DirectComposition den linken oder rechten Stereokanal (abhängig von der Anwendung) als Mono-Inhalt und erstellt nur diese Daten für die Bitmapressource.
DirectComposition unterstützt das Erstellen oder Bearbeiten von Stereoinhalten nicht und kann keine Mono-Swapchain zu einem Stereopaar heraufstufen. Eine Anwendung muss diese Aufgaben ausführen, bevor DirectX-Stereoinhalte in DirectComposition dargestellt werden. Außerdem muss eine Anwendung den linken und rechten Kanalversatz für die Tiefenwahrnehmung bereitstellen; DirectComposition kann den linken und rechten Kanalversatz nicht anpassen, um die wahrgenommene Tiefe von DirectX-Stereoinhalten zu ändern.
DirectX-Stereoinhalte werden zusammengesetzt und auf DWM gespeichert, wenn stereofähige Hardware verfügbar ist.
Fensterbitmaps
Eine "Fensterbitmap" ist keine echte Bitmap, sondern ein Platzhalter, den DirectComposition in Echtzeit durch Rasterisierungen von ebenenebenen oder untergeordneten Fenstern ersetzt. Eine Fensterbitmap ähnelt einer DWM-Miniaturansicht, mit der Ausnahme, dass eine Miniaturansicht Beiträge aus vielen Fenstern enthalten kann, z. B. nicht untergeordnete Fenster, während eine DirectComposition-Fensterbitmap immer eine Darstellung nur eines Fensters und seiner untergeordneten Elemente ist.
Da DirectComposition Zugriff auf die Umleitungsflächen aller Fenster und aller visuellen Strukturen hat, kann er den Inhalt aus einem Fenster in mehreren visuellen Strukturen wiederverwenden. Das Fenster muss überschichtet werden, da ein nicht layeriertes Fenster nicht über eine dedizierte Umleitungsoberfläche verfügt und daher die Rasterung nicht immer für DirectComposition verfügbar ist.
Um eine Fensterbitmap zu verwenden, ordnet eine Anwendung einem Fensterhandle (HWND) ein visuelles Element zu. Anschließend erstellt DirectComposition das Visuelle neu, wenn sich der Inhalt des Fensters ändert, einschließlich der Änderung des Inhalts als Ergebnis von Änderungen an den visuellen Strukturen, die dem Fenster zugeordnet sind. Anders ausgedrückt: Wie DWM-Miniaturansichten sind DirectComposition-Fensterbitmaps "live".
Zuordnen von Bitmapinhalten zu einem visuellen Element
Für alle drei Arten von Bitmaps kann eine Anwendung dieselbe Bitmap mehreren visuellen Elementen zuordnen. Dies bedeutet, dass eine einzelne Speicherzuweisung verwendet werden kann, um denselben Inhalt mehrmals anzuzeigen.
Alphakanal
Alle Bitmaps weisen ein BPP-Format (32 Bit pro Pixel) auf, das acht Bit für transparenz pro Pixel enthält. Eine Anwendung kann jedoch angeben, wie DirectComposition den Alphakanal nutzen soll. Insbesondere kann DirectComposition den Alphakanal respektieren oder Alpha insgesamt ignorieren, in diesem Fall gilt die Bitmap als vollständig undurchsichtig.
Ein zusätzlicher Alphamodus ignoriert den Alphakanal, behandelt aber die Werte rot, grün und blau als Alphawerte pro Kanal anstelle der normalen Interpretation dieser Kanäle als Farbintensitäten. Dieser Modus ist nützlich für das ClearType-Rendering, für das Informationen zur Abdeckung von Unterpixeln erforderlich sind. Um den Alphamodus pro Kanal zu verwenden, muss eine Anwendung zunächst Direct2D- und DirectWrite- verwenden, um Subpixelabdeckungsdaten in eine Bitmap zu schreiben. Als Nächstes muss die Anwendung den richtigen Alphamodus festlegen und eine Textfarbe angeben, wenn sie die Bitmap einem visuellen Element zuordnet. DirectComposition blendet die Textfarbe mit den Abdeckungsdaten zusammen, wodurch ClearType-Blending vor dem Hintergrund erzeugt wird.
In Situationen, in denen der ClearType-Algorithmus nicht anwendbar ist, z. B. wenn die Bitmap nicht pixelbündig und achsenbündig ausgerichtet ist oder auf eine Zwischenoberfläche gezeichnet werden muss, kann DirectComposition die Subpixel-Abdeckungsdaten in der Bitmap verwenden, um stattdessen automatisch und ohne zusätzliche Kosten eine Graustufenrasterung zu erzeugen.
Weitere Informationen finden Sie in der Beschreibung des alphaMode- Parameters der IDCompositionDevice::CreateSurface oder IDCompositionDevice::CreateVirtualSurface Funktion.
Verwandte Themen