Condividi tramite


Comportamento del profilo ICC con colore avanzato

Advanced Color è un termine generico di tecnologie del sistema operativo per i display con una fedeltà di colore significativamente superiore rispetto agli schermi standard. Per altre informazioni, vedere Usare DirectX con colore avanzato in intervalli dinamici di alto livello o standard. La gestione avanzata dei colori e dei colori automatici garantisce colori di visualizzazione coerenti e cromaticamente accurati per tutte le app, sia legacy che moderne. Tuttavia, l'app potrebbe già eseguire la propria gestione esplicita dei colori usando profili di colore International Color Consortium (ICC).

Quando Il colore avanzato è attivo nei display SDR o HDR, il comportamento dei profili ICC 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 assicurarsi che l'app continui a ottenere un comportamento corretto. Le app avanzate che supportano il colore devono passare dall'interazione diretta con i profili ICC visualizzati perché Windows fornisce API sostitutive rivolte all'app che astraggono il profilo; Le linee guida complete sono disponibili in Usare DirectX con colore avanzato su intervalli dinamici standard/elevati.

In questo argomento vengono descritte le modifiche apportate al comportamento del profilo ICC. 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 del colore avanzato.

Comportamento legacy di gestione dei colori di Windows

Quando Advanced Color è 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 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, molto spesso usando profili di colore International Color Consortium (ICC). I passaggi concettuali principali sono:

  1. Ottiene le caratteristiche di colore 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 del display.

Ecco altri dettagli su ognuno dei tre passaggi.

Ottenere le caratteristiche di colore dello schermo

Un'app Win32 usa le funzioni di gestione dei profili di Sistema colori di Windows per ottenere il profilo ICC predefinito, che indica le caratteristiche di colore dello schermo, inclusa la gamma di colori disponibile.

Un'app UWP (Universal Windows Platform) usa Metodo DisplayInformation.GetColorProfileAsync.

Eseguire la conversione dello spazio dei colori nello spazio colori dello schermo

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

È importante notare che la gestione dei colori basata su profilo ICC è con riferimento visualizzato o di output. Ciò significa che i valori di colore non vengono archiviati come colori assoluti (a cui si fa riferimento) , ma vengono codificati invece rispetto 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, RGB(1, 0, 0) viene semplicemente interpretato dal display come il rosso più saturo (rosso Adobe RGB), che non è corretto. Quando si applica una trasformazione di colore ICC, il colore verrà codificato nuovamente come RGB(0.858659, 0, 0)e quando viene eseguito il rendering dallo schermo Adobe RGB, verrà riprodotto correttamente come rosso sRGB.

Eseguire il mapping di gamut per vincolare la gamma della visualizzazione

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 è detto mapping di gamut.

Il mapping 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 che escono dalla gamma vengono ritagliati al valore di gamut più vicino.

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

Nota

Quando ci si trova in un flusso di lavoro di colori avanzato, in genere non è consigliabile usare la finalità di rendering percettivo, né per l'origine o la destinazione, poiché è stata progettata per origini SDR e 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 accuratamente sullo schermo. Ciò semplifica notevolmente le azioni necessarie nella tua app, anche se le app avanzate potrebbero continuare a eseguire ulteriori elaborazioni per ottenere un colore massimo e un'accuratezza percettiva. Per altre informazioni, vedere Usare DirectX con colore avanzato in intervalli dinamici di alto livello o standard.

Ottenere le caratteristiche di colore dello schermo

Le app avanzate che supportano il colore non devono interagire direttamente con il profilo ICC di visualizzazione. Puoi invece ottenere le proprietà del colore della visualizzazione usando DisplayInformation::GetAdvancedColorInfo o IDXGIOutput6.

Eseguire la conversione dello spazio dei colori 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 comportamento del colore 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 riprodurrà correttamente come rosso sRGB. Le app avanzate con riconoscimento dei colori devono contrassegnare il contenuto con lo spazio dei colori corretto per informare Windows usando IDXGISwapChain3::SetColorSpace1. Per tutte le app non avanzate che eseguono il rendering su 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 di RGB(1.158157,0,0) in una superficie con tag scRGB (è vincolata dalla gamma dello schermo).

Eseguire il mapping di gamut per vincolare la gamma della visualizzazione

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 manualmente.

Comportamento predefinito del profilo ICC con colore avanzato

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

In particolare, per impostazione predefinita, l'app basata sul profilo ICC è limitata alla gamma sRGB, anche se il monitor è effettivamente più ampio. Windows offre anche un helper di compatibilità ICC che può concedere all'app ICC l'accesso all'intera gamma dello schermo. Per altre info, vedere la sezione Display ICC profile compatibility helper in questo argomento.For more info, see the Display ICC profile compatibility helper section.

Ottenere le caratteristiche di colore 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 visualizzati sono ancora validi e usati con 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 profili.

Per applicare questa operazione, Windows aggiunge il concetto di sottotipi di profilo colore STANDARD e EXTENDED. Questo vale per qualsiasi API di gestione dei profili di colore che usano l'COLORPROFILESUBTYPE:

CPST_STANDARD_DISPLAY_COLOR_MODE
CPST_EXTENDED_DISPLAY_COLOR_MODE

Nota

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

Visualizza le associazioni di profili destinate all'uso in SDR (standard SDR o Advanced Color SDR), che hanno un sottotipo STANDARD (ovvero l'impostazione predefinita se non viene specificato alcun valore). Le associazioni di profili di visualizzazione per l'uso in modalità HDR sono sottotipi EXTENDED. Se l'app non specifica un sottotipo, questo viene interpretato come STANDARD.

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

Eseguire la conversione dello spazio dei colori nello spazio colori dello schermo

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

Eseguire il mapping di gamut per vincolare la gamma della visualizzazione

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 visualizzare i profili ICC che consentono l'accesso all'intera gamma dello schermo. In questo modo l'app continua a ottenere colori di gamma accurati e ampi fino alla funzionalità segnalata dello schermo, la stessa funzionalità disponibile su monitor wide gamut calibrati in modalità colore non avanzato legacy. Senza questo helper, l'app sarà limitata al comportamento predefinito, ovvero sRGB (vedi comportamento predefinito del profilo ICC con Advanced Color).

Questo helper è disponibile a partire da Windows 11. Non offre altri vantaggi del colore avanzato, incluso l'accesso a una maggiore precisione/profondità bit o a un intervallo dinamico elevato. Dovrai modificare l'app in modo che sia compatibile con i colori avanzati.

Abilitazione dell'helper di compatibilità ICC per la visualizzazione

L'helper di compatibilità ICC di visualizzazione è 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 colori ICC per la visualizzazione legacy. 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à ICC per un eseguibile

Windows abilita automaticamente l'helper per alcune app più diffuse che sono note per l'uso della gestione del profilo colori ICC.

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

Ottenere le caratteristiche di colore dello schermo

Se l'helper di compatibilità è attivo, quando l'app esegue una query per il profilo colore STANDARD predefinito usando le funzioni di gestione dei profili di Windows Color System , Windows costruisce un profilo ICC sintetico usando gli stessi dati che popolano le API di visualizzazione Avanzate colori. I dati del profilo sintetico possono provenire da una combinazione del profilo di colore corrente, dall'EDID o DisplayID dello schermo o da altre origini.

Se l'app esegue una query per il profilo colore EXTENDED predefinito, indica che l'app è compatibile con colori avanzati e riceverà il profilo EXTENDED effettivo.

Eseguire la conversione dello spazio dei colori nello spazio colori dello schermo

Se l'helper di compatibilità è attivo, l'app dovrebbe usare la gestione dei colori ICC per definire come destinazione il profilo di visualizzazione sintetica. Windows presuppone che l'app abbia come destinazione tale spazio colore e 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 destinazione dello spazio colore dello schermo, anche se alcuni di questi non sono gestiti dal colore e destinazioni nominale sRGB (ad esempio, l'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 sottoposto a rendering.

Eseguire il mapping di gamut per vincolare la gamma del display

Qualsiasi comportamento di mapping di gamut esistente viene mantenuto.

Modifiche al comportamento visibili dell'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 si tratta di un profilo sintetico. Il contenuto descrittivo del profilo (incluso il nome) è un dettaglio di 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 dello schermo, come descritto dal profilo ICC.