Share via


Comportamento del profilo ICC con colore avanzato

Il colore avanzato è un termine generico di tecnologie del sistema operativo per gli schermi con una fedeltà dei colori significativamente superiore rispetto agli schermi standard. Per altre informazioni, vedere Use DirectX with Advanced Color on high/standard dynamic range display .For more information, refer to Use DirectX with Advanced Color on high/standard dynamic range display.For more information, refer to Use DirectX with Advanced Color on high/standard dynamic range display. La gestione avanzata dei colori e dei colori garantisce un colore di visualizzazione coerente e colorimetricamente accurato per tutte le app: legacy e moderno. Tuttavia, l'app potrebbe già eseguire una gestione esplicita dei colori usando profili di colore INTERNATIONAL Color Consortium (ICC).

Quando Il colore avanzato è attivo negli schermi SDR o HDR, il comportamento dei profili CP visualizzati cambia in modi non compatibili con le versioni precedenti. Se l'app funziona con i profili ICC visualizzati, Windows offre helper di compatibilità per garantire che l'app continui a ottenere un comportamento corretto. Le app avanzate che supportano i colori devono passare dall'interazione diretta con i profili CP visualizzati, poiché Windows fornisce API per le app sostitutive che astraggono il profilo; Le linee guida complete sono disponibili in Usare DirectX con colore avanzato nei display con intervallo dinamico standard/elevato.

In questo argomento vengono descritte le modifiche apportate al comportamento del profilo CPI. Inoltre, se l'app gestita dal colore deve continuare a usare i profili ICC visualizzati, questo argomento mostrerà come adattare l'app per sfruttare in modo incrementale i vantaggi di Colore avanzato.

Comportamento di gestione dei colori di Windows legacy

Quando Il colore avanzato è inattivo, Windows non esegue alcuna gestione dei colori nell'output del contenuto visivo dell'app (ad esempio, GDI hDC, catena di scambio DirectX o oggetto visivo di composizione); in pratica, presuppone che il contenuto dell'app si trova nello spazio dei colori sRGB standard. Se vuoi una riproduzione accurata dei colori sullo schermo attivo, la tua app deve eseguire la propria gestione dei colori, più spesso usando profili colori INTERNATIONAL Color Consortium (ICC). I passaggi concettuali principali sono:

  1. Ottenere le caratteristiche dei colori dello schermo.
  2. Eseguire la conversione dello spazio dei colori nello spazio colori dello schermo.
  3. Eseguire il mapping di gamut per vincolare alla gamma dello schermo.

Ecco altri dettagli su ech dei tre passaggi.

Ottenere le caratteristiche dei colori dello schermo

Un'app Win32 usa le funzioni di gestione dei profili del sistema colori di Windows per ottenere il profilo CPI predefinito, che indica le caratteristiche di colore della visualizzazione, inclusa la gamma di colori disponibile.

Un'app piattaforma UWP (Universal Windows Platform) usa invece il metodo DisplayInformation.GetColorProfileAsync.

Eseguire la conversione dello spazio colore nello spazio colori dello schermo

Se lo spazio colore della visualizzazione non corrisponde allo spazio colore del contenuto, è necessario eseguire una conversione dello spazio colori. Ad esempio, il contenuto digitale viene spesso codificato come sRGB, ma la visualizzazione potrebbe essere ampia gamma DCI-P3. In genere si usa una libreria di gestione colori CPI che legge il profilo CPI e trasforma i valori di colore del contenuto in modo che corrispondano. Windows offre più motori di gestione colori CP; Ad esempio, l'effetto di gestione dei colori Direct2D.

È importante notare che la gestione dei colori basata sul profilo di CPI è a cui fa riferimento la visualizzazione o l'output. Ciò significa che i valori di colore non vengono archiviati come colori assoluti (a cui viene fatto riferimento alla scena), ma vengono codificati in relazione allo spazio colore dello schermo (il dispositivo di output). Ad esempio, se l'app esegue il rendering di sRGB in rosso, questa viene rappresentata come RGB(1, 0, 0) nell'output di cui è stato eseguito il rendering. Tuttavia, se si esegue il rendering del contenuto su uno schermo Adobe RGB, il RGB(1, 0, 0) display viene semplicemente interpretato dal display come rosso più saturo (rosso Adobe RGB), che non è corretto. Quando si applica una trasformazione di colore CPI, il colore verrà codificato nuovamente come RGB(0.858659, 0, 0)e quando viene eseguito il rendering dallo schermo Adobe RGB, il colore verrà riprodotto correttamente come rosso sRGB.

Eseguire il mapping di gamut per vincolare alla gamma dello schermo

Oltre a reinterpretare i valori dei colori in modo che corrispondano allo spazio colore dello schermo, è necessario gestire il caso in cui la visualizzazione non possa riprodurre fisicamente tutti i colori nel contenuto; se la gamma di colori del contenuto è maggiore di quella dello schermo. Questo processo è denominato mapping di gamut.

Il mapping di gamut è una perdita perché è necessario fare un compromesso su come approssimare la gamma più ampia del contenuto. Il metodo più semplice è colorimetrico, in cui i colori all'interno della gamma dello schermo vengono mantenuti e i colori fuori dalla gamma vengono ritagliati al valore di gamut più vicino.

In un flusso di lavoro basato su profilo ICC, il mapping di gamut viene in genere gestito automaticamente nella libreria di gestione dei colori. È possibile controllare il comportamento di mapping selezionando la finalità di rendering (vedere Modalità di finalità di rendering).

Nota

Quando ci si trova in un flusso di lavoro a colori avanzato, in genere non è consigliabile usare la finalità di rendering percettivo, né per l'origine né per la destinazione, poiché è stata progettata per le origini SDR e le destinazioni con gamut di colori più piccoli rispetto a quelli usati per HDR e alcuni schermi WCG; pertanto l'uso di questi può comportare un comportamento imprevisto.

Gestione automatica dei colori del sistema Windows

Quando Il colore avanzato è attivo, Windows esegue la gestione automatica dei colori del sistema, assicurando che il contenuto del colore dell'app venga riprodotto in modo accurato sullo schermo. Questo semplifica notevolmente le azioni necessarie nell'app, anche se le app avanzate potrebbero continuare a eseguire ulteriori elaborazioni per ottenere la massima precisione del colore e percettiva. Per altre informazioni, vedere Use DirectX with Advanced Color on high/standard dynamic range display .For more information, refer to Use DirectX with Advanced Color on high/standard dynamic range display.For more information, refer to Use DirectX with Advanced Color on high/standard dynamic range display.

Ottenere le caratteristiche dei colori dello schermo

Le app avanzate con riconoscimento dei colori non devono interagire direttamente con il profilo CPI visualizzato. Puoi invece ottenere le proprietà del colore della visualizzazione usando DisplayInformation::GetAdvancedColorInfo o IDXGIOutput6.

Eseguire la conversione dello spazio colore nello spazio colori dello schermo

Windows eseguirà la conversione dello spazio colore nello spazio colori dello schermo determinato dal profilo colore predefinito corrente. Se non è presente alcun profilo, verranno usati i dati colorimetry EDID. L'app ottiene automaticamente il comportamento dei colori a cui si fa riferimento alla scena , ad esempio se si esegue il rendering di sRGB rosso codificato come RGB(1, 0, 0) e viene visualizzato in un monitor Adobe RGB, Windows lo riproduce correttamente come rosso sRGB. Le app con riconoscimento dei colori avanzate devono contrassegnare il contenuto con lo spazio colori corretto per informare Windows usando IDXGISwapChain3::SetColorSpace1. Per tutte le app non con riconoscimento dei colori avanzate che eseguono il rendering in un formato pixel intero standard (ad esempio, RGBA a 8 bit), Windows considererà in modo esplicito l'app come sRGB. Se vuoi eseguire il rendering del rosso AdobeRGB in uno scenario di colore avanzato, dovrai eseguire il rendering RGB(1.158157,0,0) in una superficie con tag scRGB (è vincolata dalla gamma dello schermo).

Eseguire il mapping di gamut per vincolare alla gamma dello schermo

La pipeline di visualizzazione della GPU eseguirà il ritaglio numerico sui colori out-of-gamut. Se la tua app vuole usare un mapping più sofisticato, devi farlo da solo.

Comportamento predefinito del profilo ICC con Colore avanzato

La gestione automatica dei colori del sistema influisce necessariamente sul comportamento delle app basate su profili CP esistenti, poiché stanno eseguendo molte azioni che sono ora gestite dal sistema operativo (OS.) Windows applica il comportamento predefinito (descritto di seguito) alle app basate su profilo CP. Ciò garantisce che tali app non abbiano un comportamento errato. Tuttavia, senza ulteriori operazioni, non otterranno l'accesso ad alcuna delle funzionalità di colore estese.

In particolare, per impostazione predefinita, l'app basata su profilo ICC è limitata alla gamma sRGB, anche se il monitor è effettivamente più ampio. Windows offre anche un helper di compatibilità CPI che consente all'app CPI di accedere all'intera gamma dello schermo. Per altre info, vedi la sezione Display ICC profile compatibility helper in questo argomento.

Ottenere le caratteristiche dei colori dello schermo

Quando Il colore avanzato è attivo, tutte le chiamate alle API di gestione del profilo colore per ottenere il profilo predefinito per una visualizzazione restituiranno "nessun profilo", indipendentemente dai profili effettivamente installati. Per convenzione, "nessun profilo" deve essere interpretato come sRGB.

I profili ICC di visualizzazione sono ancora validi e usati con Il colore avanzato, ma vengono usati solo a livello di sistema e la maggior parte delle app non dovrebbe interagire direttamente con loro. Le informazioni seguenti sono in genere necessarie solo se l'app è un'utilità che enumera tutti i profili di visualizzazione o crea/installa i profili.

Per applicarlo, Windows aggiunge il concetto di sottotipi di STANDARD profilo colore e EXTENDED . Questo vale per qualsiasi API di gestione del profilo colore che usano COLORPROFILESUBTYPE:

CPST_STANDARD_DISPLAY_COLOR_MODE
CPST_EXTENDED_DISPLAY_COLOR_MODE

Nota

STANDARD e EXTENDED i sottotipi non sono una proprietà archiviata all'interno del profilo stesso, ma si applicano all'associazione del profilo a una visualizzazione, ovvero quando il profilo viene aggiunto all'elenco di associazioni del profilo di visualizzazione. Un singolo profilo può essere associato a entrambi STANDARD i sottotipi e EXTENDED per una visualizzazione, vale a dire che sarebbe disponibile sia per gli scenari standard che per i colori avanzati.

Visualizzare le associazioni di profilo destinate all'uso in SDR( standard SDR o Advanced Color SDR) hanno un sottotipo STANDARD (il valore predefinito è quello predefinito se non è specificato alcun valore). Le associazioni dei profili di visualizzazione per l'uso in modalità HDR sono sottotipo EXTENDED. Se l'app non specifica un sottotipo, viene interpretato come STANDARD.

Qualsiasi API getter che usa COLORPROFILESUBTYPE restituirà solo i profili con corrispondenza STANDARD o EXTENDED sottotipo. Ad esempio, se HDR è attivo, gli unici profili di visualizzazione con il sottotipo sono validi per l'uso EXTENDED e STANDARD i profili di sottotipo non vengono usati. Setter Le API possono specificare il sottotipo (STANDARD è l'impostazione predefinita).

Eseguire la conversione dello spazio colore nello spazio colori dello schermo

Poiché le API di gestione del profilo CPI restituiscono sRGB quando Il colore avanzato è attivo, l'app basata su profilo ICC gestirà a colori per sRGB e Windows riprodurrà correttamente come sRGB sullo schermo.

Eseguire il mapping di gamut per vincolare alla gamma dello schermo

Qualsiasi comportamento di mapping di gamut esistente viene mantenuto.

Visualizzare l'helper di compatibilità del profilo ICC

Quando Il colore avanzato è attivo, Windows fornisce un helper di compatibilità per la visualizzazione dei profili CP che consente l'accesso all'intera gamma dello schermo. In questo modo l'app continua a ottenere colori di gamut accurati e ampi fino alla funzionalità segnalata dello schermo, ovvero la stessa funzionalità disponibile nei monitor a gamut wide calibrati in modalità legacy non Advanced Color oggi. Senza questo helper, l'app sarà limitata al comportamento predefinito, ovvero sRGB (vedi Comportamento predefinito del profilo CP con Colore avanzato).

Tale helper è disponibile a partire da Windows 11. Non offre altri vantaggi di Colore avanzato, incluso l'accesso a una maggiore precisione/profondità di bit o a un intervallo dinamico elevato. Sarà necessario modificare l'app in modo che sia compatibile con il colore avanzato.

Abilitazione dell'helper per la compatibilità di DISPLAY ICC

L'helper di compatibilità ICC visualizzato è abilitato per ogni app. Non è abilitata per impostazione predefinita.

Gli utenti possono abilitarlo per un'app passando alla scheda Compatibilità delle proprietà dell'eseguibile e selezionando Usa gestione dei colori di visualizzazione legacy di CPI. L'helper di compatibilità viene applicato all'intero processo ed è attivo solo quando il colore avanzato è abilitato per la visualizzazione, non ha alcun effetto su uno schermo SDR standard.

Interfaccia utente per abilitare la visualizzazione dell'helper di compatibilità CP per un eseguibile

Windows abilita automaticamente l'helper per alcune app popolari che sono note per l'uso della gestione del profilo colori CP.

Non è possibile abilitare l'helper di compatibilità per l'app.

Ottenere le caratteristiche del colore del display

Se l'helper di compatibilità è attivo, quando l'app esegue query per il profilo di colore predefinito STANDARD usando le funzioni di gestione del profilo del profilo di Sistema colori di Windows, Windows costruisce un profilo ICC sintetico usando gli stessi dati che popolano le api di visualizzazione avanzate del colore. I dati del profilo sintetico possono derivare da una combinazione del profilo di colore corrente, dall'EDID o DisplayID della visualizzazione o da altre origini.

Se l'app esegue query per il profilo colore predefinito EXTENDED , indica che l'app è a conoscenza del colore avanzato e riceverà il profilo effettivo EXTENDED .

Eseguire la conversione dello spazio dei colori nello spazio dei colori della visualizzazione

Se l'helper di compatibilità è attivo, è previsto che l'app usi la gestione dei colori ICC per indirizzare il profilo di visualizzazione sintetico. Windows presuppone che l'app sia destinata allo spazio dei colori e che eseguirà la conversione corretta dello spazio dei colori per assicurarsi che venga eseguito il rendering accurato sullo schermo.

La conversione dello spazio dei colori si applica all'intero processo dell'app, quindi tutto il contenuto visivo dell'app viene considerato come destinato allo spazio dei colori della visualizzazione, anche se alcuni di esso non sono gestiti dal colore e destinazioni nominale sRGB (ad esempio, interfaccia utente). La conversione dello spazio dei colori viene applicata anche indipendentemente dall'API grafica (GDI, DirectX, XAML e così via), dal formato pixel o da altre caratteristiche del contenuto di cui è stato eseguito il rendering.

Eseguire il mapping di gamut per limitare il gamut del display

Qualsiasi comportamento di mapping di gamut esistente viene mantenuto.

Modifiche al comportamento visibile dall'utente

Gli utenti possono verificare se l'helper di compatibilità ICC visualizzato è attivo per un eseguibile controllando la scheda Proprietà compatibilità. Se l'app mostra informazioni sul profilo icc di visualizzazione predefinito, gli utenti vedranno che è un profilo sintetico. Il contenuto descrittivo del profilo (incluso il nome) è un dettaglio dell'implementazione.

Il comportamento effettivo del colore deve essere identico a quando Il colore avanzato è disabilitato. In entrambi i casi, l'app eseguirà il rendering di colori accurati che possono accedere alla gamma completa della visualizzazione, come descritto dal profilo ICC.