Objets Bitmap

Notes

Pour les applications sur Windows 10, nous vous recommandons d’utiliser les API Windows.UI.Composition au lieu de DirectComposition. Pour plus d’informations, consultez Moderniser votre application de bureau à l’aide de la couche Visual.

Microsoft DirectComposition est un moteur de composition bitmap. Il permet aux développeurs d’applications de combiner plusieurs bitmaps et de les manipuler de différentes manières pour obtenir des effets visuels et des animations intéressants dans une interface utilisateur d’application. Cette rubrique décrit les types de contenu bitmap pris en charge par DirectComposition.

Contenu bitmap

Les applications fournissent à DirectComposition le contenu bitmap pour composer et animer en créant des objets visuels, puis en définissant la propriété Content de ces objets. DirectComposition n’offre aucun service de rastérisation. Une application doit utiliser une autre bibliothèque de rastérisation logicielle ou matérielle accélérée, telle que Direct2D ou Direct3D , pour remplir les bitmaps à composer. Après la composition, DirectComposition transmet le contenu bitmap composé au Gestionnaire de fenêtres de bureau (DWM) pour le rendu à l’écran.

Types pris en charge de contenu bitmap Microsoft DirectComposition prend en charge les types de bitmaps suivants :

Bitmaps de mémoire vidéo

Une image bitmap de mémoire vidéo est rastérisée dans le matériel à l’aide de méthodes Microsoft DirectX (y compris le modèle d’interopérabilité DX à GDI). Il est soutenu par des surfaces partagées inter-processus qui sont visibles pour l’application appelante et pour DirectComposition. Une image bitmap de mémoire vidéo n’est pas soumise au déchirement, car l’application peut uniquement lire à partir des surfaces à partir des textures DirectComposition.

Contenu vidéo

Les applications peuvent utiliser DirectComposition pour composer des images vidéo qui utilisent des chaînes d’échange DirectX sans fenêtre liées à une surface DirectComposition. D’un point de vue conceptuel, DirectComposition traite le contenu vidéo comme une séquence de bitmaps. DirectComposition ne fournit pas de moyen de présenter des images vidéo.

DirectComposition prend en charge les chaînes d’échange sans fenêtre DirectX, c’est-à-dire les chaînes d’échange qui ne sont pas liées à une fenêtre particulière, et permet à deux applications différentes de partager des chaînes d’échange sans fenêtre au-delà des limites de processus. Le partage de chaînes d’échange sans fenêtre permet des scénarios vidéo dans lesquels la chaîne d’échange est créée dans un processus et est utilisée avec DirectComposition dans un deuxième processus. Les chaînes d’échange sans fenêtre sont créées à l’aide de la méthode IDXGIFactory2::CreateSwapChainForCompositionSurface .

Pour plus d’informations sur les chaînes d’échange DirectX, consultez Vue d’ensemble de DXGI.

Contenu stéréo

D’un point de vue conceptuel, une chaîne d’échange stéréo se compose de surfaces DXGI (Microsoft DirectX Graphics Infrastructure) qui représentent les canaux gauche et droit pour le contenu 3D stéréo. Lorsqu’une chaîne d’échange stéréo est utilisée comme ressource bitmap pour un visuel, DirectComposition compose en stéréo. Tout le contenu non stéréo (contenu mono) est considéré comme ayant un contenu de canal gauche et droit identique ; autrement dit, le même contenu bitmap est utilisé pour les deux canaux. DirectComposition compose tout le contenu gauche et le contenu droit séparément. Si le périphérique d’affichage n’est pas compatible stéréo, DirectComposition traite le canal stéréo gauche ou droit (selon l’application) comme contenu mono et compose uniquement en utilisant ces données pour la ressource bitmap.

DirectComposition ne prend pas en charge la création ou la manipulation de contenu stéréo et ne peut pas promouvoir une chaîne d’échange mono vers une paire stéréo. Une application doit effectuer ces tâches avant de présenter du contenu stéréo DirectX à DirectComposition. En outre, une application doit fournir les décalages de canal gauche et droit pour la perception de la profondeur ; DirectComposition ne peut pas ajuster les décalages des canaux gauche et droit pour modifier la profondeur perçue du contenu stéréo DirectX.

Le contenu stéréo DirectX est composé et conservé dans DWM lorsque du matériel stéréo est disponible.

Bitmaps de fenêtre

Une « bitmap de fenêtre » n’est pas une image bitmap réelle, mais est un espace réservé que DirectComposition remplace en temps réel par des rastérisations de fenêtres de niveau supérieur ou enfants en couches. Une image bitmap de fenêtre est similaire à une miniature DWM, à ceci près qu’une miniature peut contenir des contributions de nombreuses fenêtres, telles que des fenêtres non enfants, tandis qu’une image bitmap de fenêtre DirectComposition est toujours une représentation d’une seule fenêtre et de ses enfants.

Étant donné que DirectComposition a accès aux surfaces de redirection de toutes les fenêtres et de toutes les arborescences visuelles, il peut réutiliser le contenu d’une fenêtre dans plusieurs arborescences visuelles. La fenêtre doit être superposée, car une fenêtre non en couches n’a pas de surface de redirection dédiée et, par conséquent, sa rastérisation n’est pas toujours disponible pour DirectComposition.

Pour utiliser une bitmap de fenêtre, une application associe un visuel à un handle de fenêtre (HWND). Ensuite, DirectComposition compose à nouveau le visuel chaque fois que le contenu de la fenêtre change, y compris lorsque le contenu change à la suite de modifications apportées aux arborescences visuelles associées à la fenêtre. En d’autres termes, comme les miniatures DWM, les bitmaps de fenêtre DirectComposition sont « actives ».

Association de contenu bitmap à un visuel

Pour les trois types de bitmaps, une application peut associer la même bitmap à plusieurs visuels, ce qui signifie qu’une seule allocation de mémoire peut être utilisée pour afficher le même contenu plusieurs fois.

Canal alpha

Toutes les bitmaps ont un format BPP (32 bits par pixel), qui comprend huit bits pour la transparence par pixel. Toutefois, une application peut spécifier la façon dont DirectComposition doit consommer le canal alpha. En particulier, DirectComposition peut respecter le canal alpha ou ignorer complètement alpha, auquel cas la bitmap est considérée comme entièrement opaque.

Un mode alpha supplémentaire ignore le canal alpha, mais traite les valeurs rouge, verte et bleue comme des valeurs alpha par canal au lieu de l’interprétation normale de ces canaux comme des intensités de couleur. Ce mode est utile pour le rendu ClearType, qui nécessite des informations de couverture de sous-pixels. Pour utiliser le mode alpha par canal, une application doit d’abord utiliser Direct2D et DirectWrite pour écrire des données de couverture de sous-pixels dans une bitmap. Ensuite, l’application doit définir le mode alpha correct et spécifier une couleur de texte lorsqu’elle associe l’image bitmap à un visuel. DirectComposition fusionne la couleur du texte avec les données de couverture, ce qui produit un mélange ClearType sur l’arrière-plan.

Dans les situations où l’algorithme ClearType n’est pas applicable, par exemple si l’image bitmap n’est pas alignée sur les pixels et l’axe, ou si elle doit être dessinée vers une surface intermédiaire, DirectComposition peut utiliser les données de couverture du sous-pixel dans la bitmap pour produire une rastérisation de nuances de gris à la place, automatiquement et sans coût supplémentaire.

Pour plus d’informations, consultez la description du paramètre alphaMode de la fonction IDCompositionDevice::CreateSurface ou IDCompositionDevice::CreateVirtualSurface .

DirectComposition Concepts