Comportamento do perfil ICC com Cor Avançada

Cor Avançada é um termo guarda-chuva de tecnologias do sistema operacional para telas com fidelidade de cores significativamente maior do que as telas padrão. Para obter mais informações, consulte Usar DirectX com Cor Avançada em exibições de intervalo dinâmico de alto/padrão. O gerenciamento avançado de cores e cores automáticas garante uma cor de exibição consistente e colorimétricamente precisa para todos os aplicativos: herdado e moderno. No entanto, seu aplicativo pode já executar seu próprio gerenciamento explícito de cores usando perfis de cores do ICC (International Color Consortium).

Quando a Cor Avançada está ativa em telas SDR ou HDR, o comportamento de exibir perfis ICC muda de maneiras não compatíveis com versões anteriores. Se seu aplicativo funciona com perfis ICC de exibição, o Windows oferece auxiliares de compatibilidade para garantir que seu aplicativo continue a obter o comportamento correto. Os aplicativos avançados com reconhecimento de cores devem sair da interação direta com perfis ICC de exibição, pois o Windows fornece APIs voltadas para aplicativos de substituição que abstraem o perfil; diretrizes completas estão disponíveis em Usar DirectX com Cor Avançada em exibições de intervalo dinâmico de alto/padrão.

Este tópico descreve as alterações no comportamento do perfil ICC. Além disso, se o aplicativo gerenciado por cores precisar continuar usando perfis ICC de exibição, este tópico mostrará como adaptar seu aplicativo para aproveitar incrementalmente os benefícios da Cor Avançada.

Comportamento de gerenciamento de cores herdado do Windows

Quando a Cor Avançada está inativa, o Windows não executa nenhum gerenciamento de cores na saída de conteúdo visual do seu aplicativo (por exemplo, GDI hDC, cadeia de troca DirectX ou visual de composição); na prática, ele pressupõe que o conteúdo do aplicativo esteja no espaço de cor sRGB padrão. Se você quiser reprodução de cores precisa na exibição ativa, seu aplicativo deverá executar seu próprio gerenciamento de cores, geralmente usando perfis de cores do ICC (International Color Consortium). As main etapas conceituais são:

  1. Obtenha as características de cor da tela.
  2. Execute a conversão de espaço em cores para o espaço de cor da exibição.
  3. Execute o mapeamento de gama para restringir a gama da exibição.

Aqui estão mais detalhes sobre o ech das três etapas.

Obter as características de cor da exibição

Um aplicativo Win32 usa as funções de gerenciamento de perfil do Sistema de Cores do Windows para obter o perfil padrão do ICC, que informa as características de cor da exibição, incluindo sua gama de cores disponível.

Um aplicativo Plataforma Universal do Windows usa o Método DisplayInformation.GetColorProfileAsync.

Executar a conversão de espaço de cor para o espaço de cores da exibição

Se o espaço de cores da exibição não corresponder ao espaço de cor do conteúdo, você deverá fazer uma conversão de espaço em cores. Por exemplo, o conteúdo digital geralmente é codificado como sRGB, mas sua exibição pode ser DCI-P3 ampla gama. Normalmente, você usaria uma biblioteca de gerenciamento de cores ICC que lê o perfil ICC e transforma os valores de cor do conteúdo para corresponder. O Windows fornece vários mecanismos de gerenciamento de cores ICC; por exemplo, o Direct2D efeito de gerenciamento de cores.

É importante observar que o gerenciamento de cores baseado em perfil icc é referenciado por exibição ou referenciado por saída. Isso significa que os valores de cor não são armazenados como cores absolutas (referenciadas pela cena), mas são codificados em relação ao espaço de cor da exibição (o dispositivo de saída). Por exemplo, se o aplicativo estiver renderizando vermelho sRGB, isso será representado como RGB(1, 0, 0) na saída renderizada. Mas se você estiver renderizando esse conteúdo em uma tela Adobe RGB, será RGB(1, 0, 0) simplesmente interpretado pela exibição como seu vermelho mais saturado (Adobe RGB vermelho), o que está incorreto. Quando você aplicar uma transformação de cor ICC, ela codificará novamente a cor como RGB(0.858659, 0, 0)e, quando ela for renderizada pela exibição do Adobe RGB, ela será reproduzida corretamente como vermelho sRGB.

Executar mapeamento de gama para restringir à gama da exibição

Além de reinterpretar valores de cor para corresponder ao espaço de cores da exibição, você precisa lidar com o caso em que a exibição não pode reproduzir fisicamente todas as cores em seu conteúdo; se a gama de cores do conteúdo for maior que a do vídeo. Esse processo é chamado de mapeamento de gama.

O mapeamento de gama é perdido porque você precisa fazer uma compensação sobre como aproximar a gama maior do conteúdo. O método mais simples é colorimetric, em que as cores que estão dentro da gama da tela são preservadas e as cores que estão fora da gama são recortadas para o valor in-gamut mais próximo.

Em um fluxo de trabalho baseado em perfil do ICC, o mapeamento de gama normalmente é tratado automaticamente na biblioteca de gerenciamento de cores. Você tem algum controle sobre o comportamento de mapeamento selecionando a intenção de renderização (consulte Modos de intenção de renderização).

Observação

Quando você está em um fluxo de trabalho de cores avançado, geralmente não recomendamos usar a intenção de renderização perceptiva, nem para origem ou destino, pois ela foi projetada para origens e destinos SDR que têm gamas de cores menores do que as usadas para HDR e algumas telas WCG; portanto, usá-los pode resultar em um comportamento inesperado.

Gerenciamento automático de cores do sistema do Windows

Quando a Cor Avançada está ativa, o Windows executa o gerenciamento automático de cores do sistema, o que garante que o conteúdo de cores do aplicativo seja reproduzido com precisão na tela. Isso simplifica drasticamente as ações necessárias em seu aplicativo, embora os aplicativos avançados possam continuar a executar processamento adicional para obter a cor máxima e a precisão perceptiva. Para obter mais informações, consulte Usar DirectX com Cor Avançada em exibições de intervalo dinâmico de alto/padrão.

Obter as características de cor da exibição

Os aplicativos avançados com reconhecimento de cores não devem interagir diretamente com o perfil ICC de exibição. Em vez disso, você pode obter as propriedades de cor da exibição usando DisplayInformation::GetAdvancedColorInfo ou IDXGIOutput6.

Executar a conversão de espaço de cor para o espaço de cores da exibição

O Windows executará a conversão de espaço de cor para o espaço de cor do vídeo determinado pelo perfil de cor padrão atual. Se não houver nenhum perfil, os dados de colorimetria EDID serão usados. Seu aplicativo obtém automaticamente o comportamento de cor referenciado pela cena , por exemplo, se você renderizar o vermelho sRGB codificado como RGB(1, 0, 0) e exibir para um monitor Adobe RGB, o Windows o reproduzirá corretamente como vermelho sRGB. Aplicativos avançados com reconhecimento de cores devem marcar seu conteúdo com o espaço de cor correto para informar o Windows usando IDXGISwapChain3::SetColorSpace1. Para todos os aplicativos não avançados com reconhecimento de cor que são renderizados em um formato de pixel inteiro padrão (por exemplo, RGBA de 8 bits), o Windows tratará explicitamente o aplicativo como sRGB. Se você quiser renderizar o AdobeRGB vermelho em um cenário de Cor Avançada, precisará renderizar RGB(1.158157,0,0) em uma superfície marcada por scRGB (ela é restrita pela gama da tela).

Executar mapeamento de gama para restringir à gama da exibição

O pipeline de exibição da GPU executará recorte numérico em cores fora de gama. Se seu aplicativo quiser usar um mapeamento mais sofisticado, você precisará fazer isso por conta própria.

Comportamento padrão do perfil ICC com Cor Avançada

O gerenciamento automático de cores do sistema necessariamente afeta a maneira como os aplicativos baseados em perfil ICC existentes se comportam, pois eles estão executando muitas ações que agora são tratadas pelo sistema operacional (SO). O Windows aplica o comportamento padrão (descrito abaixo) aos aplicativos baseados em perfil do ICC. Isso garante que esses aplicativos não tenham um comportamento incorreto. No entanto, sem mais trabalho, eles não obterão acesso a nenhuma das funcionalidades de cores estendidas.

Em particular, por padrão, seu aplicativo baseado em perfil ICC é restrito à gama sRGB, mesmo que o monitor seja realmente mais amplo. O Windows também fornece um auxiliar de compatibilidade do ICC que pode dar ao seu aplicativo ICC acesso a toda a gama da tela. Para obter mais informações, consulte a seção Auxiliar de compatibilidade de perfil do ICC de exibição neste tópico.

Obter as características de cor da exibição

Quando a Cor Avançada estiver ativa, todas as chamadas para as APIs de gerenciamento de perfil de cor para obter o perfil padrão de uma exibição retornarão "nenhum perfil", independentemente de quais perfis estão realmente instalados. Por convenção , "nenhum perfil" deve ser interpretado como sRGB.

Os perfis ICC de exibição ainda são válidos e usados com Cor Avançada, mas são usados apenas no nível do sistema e a maioria dos aplicativos não deve interagir diretamente com eles. Geralmente, as informações abaixo são necessárias somente se o aplicativo for um utilitário que enumera todos os perfis de exibição ou estiver criando/instalando perfis.

Para impor isso, o Windows adiciona o conceito de subtipos de perfil de STANDARD cor e EXTENDED . Isso se aplica a todas as APIs de gerenciamento de perfil de cor que usam COLORPROFILESUBTYPE:

CPST_STANDARD_DISPLAY_COLOR_MODE
CPST_EXTENDED_DISPLAY_COLOR_MODE

Observação

STANDARD os subtipos e EXTENDED não são uma propriedade armazenada dentro do próprio perfil; em vez disso, aplicam-se à associação do perfil a uma exibição (ou seja, quando o perfil é adicionado à lista de associação de perfil da exibição). Um único perfil pode ser associado a STANDARD subtipos e EXTENDED para uma exibição, o que significa que ele estaria disponível para cenários de Cores Padrão e Avançada.

As associações de perfil de exibição destinadas a serem usadas no SDR , seja SDR regular ou SDR de Cor Avançada, têm subtipo STANDARD (thiat é o padrão se nenhum valor for especificado). As associações de perfil de exibição para uso no modo HDR são o subtipo EXTENDED. Se o aplicativo não especificar um subtipo, isso será interpretado como STANDARD.

Qualquer API getter usando COLORPROFILESUBTYPE retornará apenas perfis com o subtipo ou EXTENDED correspondenteSTANDARD. Por exemplo, se o HDR estiver ativo, os únicos perfis de exibição com o EXTENDED subtipo serão válidos para uso e STANDARD os perfis de subtipo não serão usados. Setter As APIs podem especificar o subtipo (STANDARD é o padrão).

Executar a conversão de espaço de cor para o espaço de cores da exibição

Como as APIs de gerenciamento de perfil ICC retornam sRGB quando a Cor Avançada está ativa, seu aplicativo baseado em perfil ICC gerenciará cores para sRGB e o Windows reproduzirá corretamente isso como sRGB na exibição.

Executar mapeamento de gama para restringir à gama da exibição

Qualquer comportamento de mapeamento de gama existente é preservado.

Exibir auxiliar de compatibilidade do perfil ICC

Quando a Cor Avançada está ativa, o Windows fornece um auxiliar de compatibilidade para exibir perfis ICC que fornece acesso a toda a gama da tela. Dessa forma, seu aplicativo continua a obter cores de gama precisas e amplas até a funcionalidade relatada da exibição — a mesma funcionalidade que está disponível em monitores de gama largos calibrados no modo de cor não avançada herdado hoje. Sem esse auxiliar, seu aplicativo será limitado ao comportamento padrão, que é sRGB (consulte Comportamento padrão do perfil ICC com Cor Avançada).

Esse auxiliar está disponível a partir do Windows 11. Ele não oferece outros benefícios da Cor Avançada, incluindo o acesso a maior precisão/profundidade de bits ou alto intervalo dinâmico. Você precisará modificar seu aplicativo para ter reconhecimento de cor avançado.

Habilitando o auxiliar de compatibilidade do ICC de exibição

O auxiliar de compatibilidade do ICC de exibição está habilitado por aplicativo. Eles não são habilitados por padrão.

Os usuários podem habilitá-lo para um aplicativo acessando a guia Compatibilidade das propriedades do executável e selecionando Usar gerenciamento de cores ICC de exibição herdado. O auxiliar de compatibilidade é aplicado a todo o processo e está ativo somente quando a Cor Avançada está habilitada para a exibição, não tem efeito em uma exibição SDR padrão.

Interface do usuário para habilitar a exibição do auxiliar de compatibilidade do ICC para um executável

O Windows habilita automaticamente o auxiliar para alguns aplicativos populares que são conhecidos por usar o gerenciamento de perfil de cores ICC.

Não há nenhuma maneira programática de habilitar esse auxiliar de compatibilidade para seu aplicativo.

Obter as características de cor da exibição

Se o auxiliar de compatibilidade estiver ativo, quando o aplicativo consultar o perfil de cor padrão STANDARD usando as funções de gerenciamento de perfil do Sistema de Cores do Windows, o Windows construirá um perfil ICC sintético usando os mesmos dados que preenchem as APIs de recursos de exibição de Cor Avançada. Os dados do perfil sintético podem vir de uma combinação do perfil de cores atual, do EDID ou displayID da tela ou de outras fontes.

Se o aplicativo consultar o perfil de cor padrão EXTENDED , isso indicará que seu aplicativo tem reconhecimento de cor avançado e receberá o perfil real EXTENDED .

Executar conversão de espaço de cor para o espaço de cor da exibição

Se o auxiliar de compatibilidade estiver ativo, espera-se que seu aplicativo use o gerenciamento de cores do ICC para direcionar o perfil de exibição sintética. O Windows pressupõe que seu aplicativo esteja direcionando esse espaço de cor e executará a conversão de espaço de cor correta para garantir que ele seja renderizado com precisão na tela.

A conversão de espaço de cor se aplica a todo o processo do aplicativo, portanto, todo o conteúdo visual do aplicativo é tratado como direcionando o espaço de cor do vídeo, mesmo que parte dele não seja gerenciado por cores e tenha como destino nominal o sRGB (por exemplo, interface do usuário). A conversão de espaço de cor também é aplicada independentemente da API de elementos gráficos (GDI, DirectX, XAML e assim por diante), formato de pixel ou outras características do conteúdo renderizado.

Executar mapeamento de gama para restringir à gama da exibição

Qualquer comportamento de mapeamento de gama existente é preservado.

Alterações de comportamento visíveis do usuário

Os usuários podem verificar se o auxiliar de compatibilidade do ICC de exibição está ativo para um executável verificando sua guia Propriedades de compatibilidade. Se o aplicativo mostrar informações sobre o perfil padrão do ICC de exibição, os usuários verão que ele é um perfil sintético. O conteúdo descritivo do perfil (incluindo o nome) é um detalhe de implementação.

O comportamento de cor real deve ser idêntico a quando a Cor Avançada está desabilitada. Em ambos os casos, seu aplicativo renderizará cores precisas que podem acessar a gama completa da exibição, conforme descrito pelo perfil ICC.