Compartilhar via


Comportamento do perfil ICC com Cor Avançada

Advanced Color é um termo guarda-chuva de tecnologias de sistema operacional para exibições com fidelidade de cores significativamente maior do que as exibições 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: herdados e modernos. No entanto, seu aplicativo já pode executar seu próprio gerenciamento de cores explícito usando perfis de cores do ICC (International Color Consortium).

Quando a Cor Avançada está ativa em exibições de SDR ou HDR, o comportamento de exibir perfis ICC muda de maneiras não compatíveis com versões anteriores. Se seu aplicativo funcionar com perfis ICC de exibição, o Windows oferecerá auxiliares de compatibilidade para garantir que seu aplicativo continue a obter o comportamento correto. Os aplicativos avançados com reconhecimento de cores devem se afastar da interação direta com perfis icc de exibição, pois o Windows fornece APIs voltadas para o aplicativo de substituição que abstraem o perfil; as diretrizes completas estão disponíveis em Usar o 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 seu 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 a reprodução de cores precisa na exibição ativa, o aplicativo deverá executar seu próprio gerenciamento de cores, geralmente usando perfis de cores do ICC (International Color Consortium). As principais etapas conceituais são:

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

Aqui estão mais detalhes sobre a 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 da Plataforma Universal do Windows usa método DisplayInformation.GetColorProfileAsync.

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

Se o espaço de cores do display não corresponder ao espaço de cores do conteúdo, você deverá fazer uma conversão de espaço de cor. 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 efeito de gerenciamento de cores Direct2D.

É 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 por 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 o sRGB vermelho, isso será representado como RGB(1, 0, 0) na saída renderizada. Mas se você estiver renderizando esse conteúdo em uma exibição adobe RGB, RGB(1, 0, 0) será simplesmente interpretado pela exibição como seu vermelho mais saturado (Adobe RGB vermelho), que está incorreto. Quando você aplicar uma transformação de cores ICC, ela codificará novamente a cor como RGB(0.858659, 0, 0)e, quando isso for renderizado pela exibição adobe RGB, ela será reproduzida corretamente como vermelho sRGB.

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

Além de reinterpretar valores de cores para corresponder ao espaço de cores do display, você precisa lidar com o caso em que o display não pode reproduzir fisicamente todas as cores do conteúdo; se a gama de cores do conteúdo for maior que a da exibição. 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 é colorimétrico, em que as cores que estão dentro da gama do display 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 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).

Nota

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 fontes SDR e destinos que têm gamas de cores menores do que as usadas para HDR e algumas exibições de 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, ele garante que o conteúdo de cores do aplicativo seja reproduzido com precisão na exibição. Isso simplifica drasticamente as ações necessárias em seu aplicativo, embora os aplicativos avançados possam continuar a executar processamento adicional para 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

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 cor da exibição

O Windows executará a conversão de espaço de cor para o espaço de cores da exibição 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 comportamento de cores referenciado por cena, por exemplo, se você renderizar o sRGB vermelho codificado como RGB(1, 0, 0) e exibir para um monitor Adobe RGB, o Windows 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 cores 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 Cores Avançadas, precisará renderizar RGB(1.158157,0,0) em uma superfície marcada scRGB (ela é restrita pela gama da exibição).

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

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

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

O gerenciamento automático de cores do sistema afeta necessariamente 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 (OS.) Windows aplica o comportamento padrão (descrito abaixo) a aplicativos baseados em perfil 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 uma gama mais ampla. O Windows também fornece um auxiliar de compatibilidade do ICC que pode dar ao aplicativo ICC acesso a toda a gama da exibição. Para obter mais informações, consulte a seção auxiliar de compatibilidade de perfil do ICC 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 "sem 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. As informações abaixo geralmente 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 cor STANDARD e EXTENDED. Isso se aplica a todas as APIs de gerenciamento de perfil de cor que usam o COLORPROFILESUBTYPE:

CPST_STANDARD_DISPLAY_COLOR_MODE
CPST_EXTENDED_DISPLAY_COLOR_MODE

Nota

STANDARD e EXTENDED subtipos não são uma propriedade armazenada dentro do próprio perfil; em vez disso, elas se aplicam à 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 subtipos STANDARD e EXTENDED para uma exibição, o que significa que ele estaria disponível para cenários de Cores Padrão e Avançado.

As associações de perfil de exibição que se destinam ao uso no SDR , seja SDR regular ou SDR de Cores Avançadas, têm o subtipo STANDARD (o 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 getter API usando COLORPROFILESUBTYPE retornará apenas perfis com o subtipo STANDARD ou EXTENDED correspondente. Por exemplo, se o HDR estiver ativo, os únicos perfis de exibição com o subtipo EXTENDED serão válidos para uso e STANDARD perfis de subtipo não serão usados. APIs setter podem especificar o subtipo (STANDARD é o padrão).

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

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

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

Qualquer comportamento de mapeamento de gama existente é preservado.

Exibir auxiliar de compatibilidade de perfil ICC

Quando a Cor Avançada está ativa, o Windows fornece um auxiliar de compatibilidade para exibir perfis ICC que fornecem acesso a toda a gama da exibição. Dessa forma, seu aplicativo continua a obter cores de gama precisas e amplas até a funcionalidade relatada da exibição , a mesma funcionalidade disponível em monitores de gama largos calibrados no modo de cor não avançado herdado hoje. Sem esse auxiliar, seu aplicativo será limitado ao comportamento padrão, que é sRGB (consulte comportamento padrão do perfil ICC comde 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 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. Ele não está habilitado por padrão.

Os usuários podem habilitá-lo para um aplicativo acessando a guia Compatibilidade das propriedades do executável e selecionando Usar o 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 exibição ou de outras fontes.

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

Executar a 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 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 exibição.

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 display, 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 o mapeamento de gama para restringir a 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 seu 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 real de cores deve ser idêntico ao de 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.