Partager via


Comportement du profil ICC avec Advanced Color

Advanced Color est un terme générique des technologies de système d’exploitation pour les écrans avec une fidélité des couleurs considérablement supérieure à celle des écrans standard. Pour plus d’informations, consultez Utiliser DirectX avec une couleur avancée sur des affichages à plage dynamique élevée/standard. La gestion avancée des couleurs et la gestion automatique des couleurs garantissent une couleur d’affichage cohérente et colorimétriquement précise pour toutes les applications: héritées et modernes. Toutefois, votre application peut déjà effectuer sa propre gestion explicite des couleurs à l’aide de profils de couleur ICC (International Color Consortium).

Quand Advanced Color est actif sur les affichages SDR ou HDR, le comportement des profils ICC d’affichage change de manière non compatible avec les versions descendantes. Si votre application fonctionne avec des profils ICC d’affichage, Windows propose des assistances de compatibilité pour garantir que votre application continue d’obtenir un comportement correct. Les applications avancées prenant en charge les couleurs doivent passer de l’interaction directe avec les profils ICC d’affichage, car Windows fournit des API orientées application de remplacement qui éliminent le profil ; Des conseils complets sont disponibles dans Utiliser DirectX avec une couleur avancée sur des affichages à plage dynamique haute/standard.

Cette rubrique décrit les modifications apportées au comportement du profil ICC. En outre, si votre application gérée par les couleurs doit continuer à utiliser des profils ICC d’affichage, cette rubrique montre comment adapter votre application pour tirer parti de manière incrémentielle des avantages de couleur avancée.

Comportement de gestion des couleurs Windows hérité

Lorsque la couleur avancée est inactive, Windows n’effectue aucune gestion des couleurs sur la sortie du contenu visuel de votre application (par exemple, GDI hDC, chaîne d’échange DirectX ou visuel de composition) ; Dans la pratique, il suppose que le contenu de votre application se trouve dans l’espace de couleurs sRGB standard. Si vous souhaitez une reproduction précise des couleurs sur l’affichage actif, votre application doit effectuer sa propre gestion des couleurs, le plus souvent à l’aide de profils de couleurs ICC (International Color Consortium). Les étapes conceptuelles main sont les suivantes :

  1. Obtenez les caractéristiques de couleur de l’affichage.
  2. Effectuer la conversion de l’espace de couleur en espace colorimétrique de l’affichage.
  3. Effectuez un mappage de gamut afin de limiter le gamut de l’affichage.

Voici plus d’informations sur l’ech des trois étapes.

Obtenir les caractéristiques de couleur de l’affichage

Une application Win32 utilise les fonctions de gestion des profils Windows Color System pour obtenir le profil ICC par défaut, qui indique les caractéristiques de couleur de l’affichage, y compris sa gamme de couleurs disponible.

Une application plateforme Windows universelle utilise la méthode DisplayInformation.GetColorProfileAsync à la place.

Effectuer la conversion de l’espace de couleur en espace colorimétrique de l’affichage

Si l’espace de couleur de l’affichage ne correspond pas à l’espace de couleurs de votre contenu, vous devez effectuer une conversion d’espace de couleur. Par exemple, le contenu numérique est souvent encodé en sRGB, mais votre affichage peut être large DCI-P3. Vous utilisez généralement une bibliothèque de gestion des couleurs ICC qui lit le profil ICC et transforme les valeurs de couleurs de votre contenu pour qu’elles correspondent. Windows fournit plusieurs moteurs de gestion des couleurs ICC ; par exemple, l’effet de gestion des couleurs Direct2D.

Il est important de noter que la gestion des couleurs basée sur un profil ICC est référencée par affichage ou par sortie. Cela signifie que les valeurs de couleur ne sont pas stockées en tant que couleurs absolues (référencées par la scène), mais qu’elles sont encodées par rapport à l’espace de couleurs de l’affichage (le périphérique de sortie). Par exemple, si votre application affiche sRGB en rouge, celui-ci est représenté comme RGB(1, 0, 0) dans votre sortie rendue. Mais si vous affichez ce contenu sur un écran Adobe RVB, RGB(1, 0, 0) il est simplement interprété par l’affichage comme son rouge le plus saturé (rouge Adobe RVB), ce qui est incorrect. Lorsque vous appliquez une transformation de couleur ICC, elle réencode la couleur en tant RGB(0.858659, 0, 0)que , et quand elle est rendue par l’affichage Adobe RVB, elle est correctement reproduite en rouge sRGB.

Effectuer un mappage de gamut pour limiter à la gamut de l’affichage

En plus de réinterpréter les valeurs de couleur pour qu’elles correspondent à l’espace de couleur de l’affichage, vous devez gérer le cas où l’affichage ne peut pas reproduire physiquement toutes les couleurs de votre contenu ; si la gamme de couleurs de votre contenu est supérieure à celle de l’affichage. Ce processus est appelé mappage de gamut.

Le mappage de gamuts est perdant, car vous devez faire un compromis sur la façon d’approcher la plus grande gamme du contenu. La méthode la plus simple est la colorimétrie, où les couleurs qui se trouvent dans la gamme de l’affichage sont conservées et les couleurs qui sont hors de la gamme sont clippées à la valeur in-gamut la plus proche.

Dans un workflow basé sur un profil ICC, le mappage de gamut est généralement géré automatiquement dans la bibliothèque de gestion des couleurs. Vous avez un certain contrôle sur le comportement de mappage en sélectionnant l’intention de rendu (voir Modes d’intention de rendu).

Notes

Lorsque vous êtes dans un workflow de couleurs avancé, nous vous déconseillons généralement d’utiliser l’intention de rendu perceptuel, ni pour la source ou la destination, car il a été conçu pour les sources et destinations SDR qui ont des gammes de couleurs plus petites que celles utilisées pour HDR et certains affichages WCG ; de sorte que leur utilisation peut entraîner un comportement inattendu.

Gestion automatique des couleurs système Windows

Lorsque La couleur avancée est active, Windows effectue une gestion automatique des couleurs système, ce qui garantit que le contenu des couleurs de votre application est reproduit avec précision sur l’écran. Cela simplifie considérablement les actions requises sur votre application, bien que les applications avancées puissent continuer à effectuer un traitement supplémentaire pour une couleur maximale et une précision perceptive. Pour plus d’informations, consultez Utiliser DirectX avec une couleur avancée sur des affichages à plage dynamique élevée/standard.

Obtenir les caractéristiques de couleur de l’affichage

Les applications avancées prenant en charge les couleurs ne doivent pas interagir directement avec le profil ICC d’affichage. Au lieu de cela, vous pouvez obtenir les propriétés de couleur de l’affichage à l’aide de DisplayInformation::GetAdvancedColorInfo ou d’IDXGIOutput6.

Effectuer la conversion de l’espace de couleur en espace colorimétrique de l’affichage

Windows effectue la conversion de l’espace de couleur en espace de couleurs de l’affichage déterminé par le profil de couleur par défaut actuel. En l’absence de profil, les données de colorimétrie EDID sont utilisées. Votre application obtient automatiquement le comportement des couleurs référencées par la scène, par exemple, si vous affichez le rouge sRGB encodé en tant que RGB(1, 0, 0) et qu’il s’affiche sur un moniteur Adobe RVB, Windows le reproduit correctement en rouge sRGB. Les applications avancées prenant en charge les couleurs doivent baliser leur contenu avec l’espace de couleur approprié pour informer Windows à l’aide d’IDXGISwapChain3::SetColorSpace1. Pour toutes les applications prenant en charge les couleurs non avancées qui s’affichent au format de pixels entiers standard (par exemple, RVBA 8 bits), Windows traite explicitement l’application comme sRVB. Si vous souhaitez afficher adobeRGB rouge dans un scénario Couleur avancée, vous devez effectuer le rendu RGB(1.158157,0,0) dans une surface marquée par scRGB (elle est limitée par la gamme de l’affichage).

Effectuer un mappage de gamut pour limiter à la gamut de l’affichage

Le pipeline d’affichage du GPU effectue un découpage numérique sur les couleurs hors gamme. Si votre application souhaite utiliser un mappage plus sophistiqué, vous devez le faire vous-même.

Comportement par défaut du profil ICC avec Advanced Color

La gestion automatique des couleurs système a nécessairement un impact sur le comportement des applications basées sur un profil ICC existantes, car elles effectuent elles-mêmes de nombreuses actions qui sont désormais gérées par le système d’exploitation Windows applique le comportement par défaut (décrit ci-dessous) aux applications basées sur un profil ICC. Cela garantit que ces applications n’ont pas de comportement incorrect. Toutefois, sans autre travail, ils n’auront accès à aucune des fonctionnalités de couleur étendues.

En particulier, par défaut, votre application basée sur un profil ICC est limitée à la gamme sRGB, même si le moniteur est en fait plus large. Windows fournit également une assistance de compatibilité ICC qui peut permettre à votre application ICC d’accéder à l’ensemble de la gamme de l’affichage. Pour plus d’informations, consultez la section Afficher l’assistance sur la compatibilité du profil ICC dans cette rubrique.

Obtenir les caractéristiques de couleur de l’affichage

Lorsque Advanced Color est actif, tous les appels aux API de gestion des profils de couleur pour obtenir le profil par défaut d’un affichage retournent « aucun profil », quels que soient les profils réellement installés. Par convention, « aucun profil » doit être interprété comme sRGB.

Les profils ICC d’affichage sont toujours valides et utilisés avec Advanced Color, mais ils sont utilisés uniquement au niveau du système, et la plupart des applications ne doivent pas interagir directement avec eux. Les informations ci-dessous sont généralement nécessaires uniquement si votre application est un utilitaire qui énumère tous les profils d’affichage ou si elle crée/installe des profils.

Pour appliquer cela, Windows ajoute le concept de sous-types de STANDARD profil de couleur et EXTENDED . Cela s’applique à toutes les API de gestion des profils de couleurs qui utilisent COLORPROFILESUBTYPE :

CPST_STANDARD_DISPLAY_COLOR_MODE
CPST_EXTENDED_DISPLAY_COLOR_MODE

Notes

STANDARD et EXTENDED les sous-types ne sont pas une propriété stockée dans le profil lui-même ; ils s’appliquent plutôt à l’association du profil à un affichage (autrement dit, lorsque le profil est ajouté à la liste d’association de profil de l’affichage). Un profil unique peut être associé à la fois STANDARD aux sous-types et EXTENDED pour un affichage, ce qui signifie qu’il serait disponible à la fois pour les scénarios Standard et Advanced Color.

Les associations de profil d’affichage destinées à être utilisées dans le SDR (SDR standard ou Advanced Color SDR) ont un sous-type STANDARD (thiat est la valeur par défaut si aucune valeur n’est spécifiée). Les associations de profil d’affichage à utiliser en mode HDR sont de sous-type EXTENDED. Si votre application ne spécifie pas de sous-type, cela est interprété comme STANDARD.

Toute API getter utilisant COLORPROFILESUBTYPE retourne uniquement les profils avec la correspondance STANDARD ou EXTENDED le sous-type. Par exemple, si HDR est actif, les seuls profils d’affichage avec le EXTENDED sous-type sont valides pour une utilisation, et STANDARD les profils de sous-type ne sont pas utilisés. Setter Les API peuvent spécifier le sous-type (STANDARD est la valeur par défaut).

Effectuer la conversion de l’espace de couleur en espace colorimétrique de l’affichage

Étant donné que les API de gestion des profils ICC retournent sRGB quand Advanced Color est actif, votre application basée sur un profil ICC gère les couleurs sur sRGB, et Windows le reproduit correctement en tant que sRGB à l’écran.

Effectuer un mappage de gamut pour limiter à la gamut de l’affichage

Tout comportement de mappage de gamut existant est conservé.

Afficher l’assistance de compatibilité du profil ICC

Lorsque La couleur avancée est active, Windows fournit une assistance de compatibilité pour les profils ICC d’affichage qui permet d’accéder à l’ensemble de la gamme de l’affichage. De cette façon, votre application continue d’obtenir des couleurs précises et larges jusqu’à la fonctionnalité signalée de l’affichage, la même fonctionnalité que celle disponible sur les moniteurs de gamut large étalonnés en mode couleur non avancé hérité aujourd’hui. Sans cette assistance, votre application sera limitée au comportement par défaut, à savoir sRGB (consultez Comportement par défaut du profil ICC avec Advanced Color).

Cette assistance est disponible à partir de Windows 11. Il ne fournit pas d’autres avantages de la couleur avancée, notamment l’accès à une précision/profondeur de bits ou à une plage dynamique élevée. Vous devez modifier votre application pour qu’elle prenne en charge les couleurs avancées.

Activation de l’assistance de compatibilité ICC d’affichage

L’assistance de compatibilité ICC d’affichage est activée par application. Il n’est pas activé par défaut.

Les utilisateurs peuvent l’activer pour une application en accédant à l’onglet Compatibilité des propriétés de l’exécutable, puis en sélectionnant Utiliser la gestion des couleurs ICC d’affichage hérité. L’assistance de compatibilité est appliquée à l’ensemble du processus et est active uniquement lorsque la couleur avancée est activée pour l’affichage. Elle n’a aucun effet sur un affichage SDR standard.

Interface utilisateur permettant d’activer l’assistance de compatibilité ICC d’affichage pour un exécutable

Windows active automatiquement l’assistance pour certaines applications populaires connues pour utiliser la gestion des profils de couleurs ICC.

Il n’existe aucun moyen par programme d’activer cette assistance de compatibilité pour votre application.

Obtenir les caractéristiques de couleur de l’affichage

Si l’assistant de compatibilité est actif, lorsque votre application interroge le profil de couleur par défaut STANDARD à l’aide des fonctions de gestion des profils du système de couleurs Windows, Windows construit un profil ICC synthétique à l’aide des mêmes données que celles qui remplissent les API des fonctionnalités d’affichage des couleurs avancées. Les données du profil synthétique peuvent provenir d’une combinaison du profil de couleur actuel, de l’EDID ou displayID de l’affichage ou d’autres sources.

Si votre application interroge le profil de couleur par défaut EXTENDED , cela indique que votre application prend en charge les couleurs avancées et qu’elle recevra le profil réel EXTENDED .

Effectuer la conversion de l’espace de couleur en espace de couleurs de l’affichage

Si l’assistance de compatibilité est active, votre application doit utiliser la gestion des couleurs ICC pour cibler le profil d’affichage synthétique. Windows suppose que votre application cible cet espace de couleurs et effectue la conversion correcte de l’espace de couleur pour s’assurer qu’il est correctement affiché sur l’écran.

La conversion de l’espace de couleurs s’applique à l’ensemble du processus d’application, de sorte que tout le contenu visuel de votre application est traité comme ciblant l’espace de couleurs de l’affichage, même si certaines d’entre elles ne sont pas gérées par les couleurs et ciblent nominalement sRGB (par exemple, l’interface utilisateur). La conversion d’espace de couleurs est également appliquée indépendamment de l’API graphique (GDI, DirectX, XAML, etc.), du format de pixels ou d’autres caractéristiques de votre contenu rendu.

Effectuer le mappage de gamuts pour limiter le gamut de l’affichage

Tout comportement de mappage de gamuts existant est conservé.

Changements de comportement visibles par l’utilisateur

Les utilisateurs peuvent vérifier si l’assistance de compatibilité ICC d’affichage est active pour un exécutable en vérifiant son onglet Propriétés de compatibilité. Si votre application affiche des informations sur le profil ICC d’affichage par défaut, les utilisateurs verront qu’il s’agit d’un profil synthétique. Le contenu descriptif du profil (nom compris) est un détail d’implémentation.

Le comportement réel des couleurs doit être identique au moment où la couleur avancée est désactivée. Dans les deux cas, votre application affiche des couleurs précises qui peuvent accéder à la gamme complète de l’affichage, comme décrit par le profil ICC.