Share via


Bitmapobjekte

Hinweis

Für Apps auf Windows 10 wird die Verwendung von Windows.UI.Composition-APIs anstelle von DirectComposition empfohlen. Weitere Informationen finden Sie unter Modernisieren Ihrer Desktop-App mithilfe der visuellen Ebene.

Microsoft DirectComposition ist eine Bitmap-Compositing-Engine. Es ermöglicht Anwendungsentwicklern, mehrere Bitmaps zu kombinieren und sie auf unterschiedliche Weise zu bearbeiten, um interessante visuelle Effekte und Animationen in einer Anwendungsoberfläche zu erzielen. In diesem Thema werden die Typen von Bitmapinhalten beschrieben, die DirectComposition unterstützt.

Bitmapinhalt

Anwendungen stellen DirectComposition mit dem Bitmapinhalt zum Verfassen und Animieren bereit, indem sie visuelle Objekte erstellen und dann die Content-Eigenschaft dieser Objekte festlegen. DirectComposition bietet keine Rasterungsdienste. 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 Komponieren übergibt DirectComposition zusammengesetzte Bitmapinhalte an den Desktopfenster-Manager (DWM) zum Rendern auf dem Bildschirm.

Unterstützte Typen von Bitmapinhalten Microsoft DirectComposition unterstützt die folgenden Arten von Bitmaps:

Bitmaps für Videospeicher

Eine Bitmap des Videospeichers wird in der Hardware mithilfe von Microsoft DirectX-Methoden (einschließlich des DX-zu-GDI-Interopmodells) gerastert. Sie wird durch prozessübergreifende freigegebene Oberflächen unterstützt, die für die aufrufende Anwendung und für DirectComposition sichtbar sind. Eine Bitmap des Videospeichers unterliegt keinem Reißen, da die Anwendung nur von den Oberflächen lesen kann, von denen DirectComposition-Texturen stammen.

Videoinhalte

Anwendungen können DirectComposition verwenden, um Videoframes zu erstellen, die fensterlose DirectX-Swapketten 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 DirectX-Swapketten, d. h. Swap chains, die nicht an ein bestimmtes Fenster gebunden sind, und ermöglicht es zwei verschiedenen Anwendungen, fensterlose Swapchains über Prozessgrenzen hinweg gemeinsam zu nutzen. Die Freigabe fensterloser Swapchains ermöglicht Videoszenarien, in denen die Swapchain in einem Prozess erstellt und mit DirectComposition in einem zweiten Prozess verwendet wird. Fensterlose Swapketten werden mit der IDXGIFactory2::CreateSwapChainForCompositionSurface-Methode erstellt.

Weitere Informationen zu DirectX-Swapchains finden Sie unter DXGI Overview.

Stereoinhalt

Konzeptionell besteht eine Stereo-Swapkette aus DXGI-Oberflächen (Microsoft DirectX Graphics Infrastructure), die die linken und rechten Kanäle für Stereo-3D-Inhalte darstellen. Wenn eine Stereo-Swapchain als Bitmapressource für ein Visual verwendet wird, wird DirectComposition in Stereo erstellt. Es wird angenommen, dass alle Nicht-Stereoinhalte (Monoinhalt) identische Links- und Rechtskanalinhalte aufweisen. Das heißt, für beide Kanäle wird derselbe Bitmapinhalt verwendet. DirectComposition erstellt alle linken Und alle rechten Inhalte separat. Wenn das Anzeigegerät nicht stereofähig ist, behandelt DirectComposition den linken oder rechten Stereokanal (je nach Anwendung) als Monoinhalt 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 präsentiert werden. Außerdem muss eine Anwendung die linken und rechten Kanaloffsets für die Tiefenwahrnehmung bereitstellen. DirectComposition kann die linken und rechten Kanaloffsets nicht anpassen, um die wahrgenommene Tiefe von DirectX-Stereoinhalten zu ändern.

DirectX-Stereoinhalte werden zusammengesetzt und in DWM beibehalten, wenn stereofähige Hardware verfügbar ist.

Fenster-Bitmaps

Eine "Fenster-Bitmap" ist keine echte Bitmap, sondern ein Platzhalter, den DirectComposition in Echtzeit durch Rasterisierungen von ebenen oberen oder untergeordneten Fenstern ersetzt. Eine Fenster-Bitmap ähnelt einer DWM-Miniaturansicht, mit dem Unterschied, dass eine Miniaturansicht Beiträge aus vielen Fenstern enthalten kann, z. B. nicht untergeordnete Fenster, während eine Bitmap des DirectComposition-Fensters immer nur eine Darstellung von nur einem Fenster und seinen untergeordneten Elementen darstellt.

Da DirectComposition Zugriff auf die Umleitungsflächen aller Fenster und aller visuellen Strukturen hat, kann der Inhalt von einem Fenster in mehreren visuellen Strukturen wiederverwendet werden. Das Fenster muss layered sein, da ein Fenster ohne Ebenen keine dedizierte Umleitungsoberfläche aufweist und daher seine Rasterung nicht immer für DirectComposition verfügbar ist.

Um eine Fenster-Bitmap zu verwenden, verknüpft eine Anwendung ein Visual mit einem Fensterhandle (Window Handle, HWND). Anschließend erstellt DirectComposition das Visual neu, wenn sich der Inhalt des Fensters ändert, einschließlich der Änderungen an den visuellen Strukturen, die dem Fenster zugeordnet sind. Anders ausgedrückt: Wie DWM-Miniaturansichten sind DirectComposition-Fenster-Bitmaps "live".

Zuordnen von Bitmapinhalten zu einem Visual

Für alle drei Arten von Bitmaps kann eine Anwendung dieselbe Bitmap mehreren Visuals zuordnen, was bedeutet, dass eine einzelne Speicherbelegung verwendet werden kann, um denselben Inhalt mehrmals anzuzeigen.

Alphakanal

Alle Bitmaps haben ein BPP-Format (32 Bits per Pixel), das acht Bits für die Transparenz pro Pixel enthält. Eine Anwendung kann jedoch angeben, wie DirectComposition den Alphakanal nutzen soll. Insbesondere kann DirectComposition den Alphakanal respektieren oder Alpha ganz ignorieren. In diesem Fall wird die Bitmap als vollständig undurchsichtig betrachtet.

Ein zusätzlicher Alphamodus ignoriert den Alphakanal, behandelt aber die roten, grünen und blauen Werte 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 Subpixelabdeckungsinformationen erforderlich sind. Um den Kanal-Alphamodus zu verwenden, muss eine Anwendung zuerst 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 Visual ordnet. DirectComposition mischt die Textfarbe mit den Abdeckungsdaten, wodurch ClearType-Blending im Hintergrund erzeugt wird.

In Situationen, in denen der ClearType-Algorithmus nicht anwendbar ist, z. B. wenn die Bitmap nicht pixel- und achsenbündig ist oder wenn sie auf eine Zwischenoberfläche gezeichnet werden muss, kann DirectComposition die Subpixelabdeckungsdaten 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 .

DirectComposition-Konzepte