Freigeben über


ICC-Profilverhalten mit erweiterter Farbe

Advanced Color ist ein Oberbegriff der Betriebssystemtechnologien für Displays mit deutlich höherer Farbtreue als Standarddisplays. Weitere Informationen finden Sie unter Verwenden von DirectX mit erweiterter Farbe auf Dynamischen Bildschirmen mit hohem/Standardbereich. Erweiterte Farbverwaltung und automatische Farbverwaltung sorgen für konsistente und farblich genaue Anzeigefarben für alle Apps– sowohl für ältere als auch für moderne Apps. Möglicherweise führt Ihre App jedoch bereits eine eigene explizite Farbverwaltung mithilfe von ICC-Farbprofilen (International Color Consortium) durch.

Wenn Erweiterte Farbe auf SDR- oder HDR-Anzeigen aktiv ist, ändert sich das Verhalten der Anzeige von ICC-Profilen auf nicht abwärtskompatible Weise. Wenn Ihre App mit Anzeige-ICC-Profilen funktioniert, bietet Windows Kompatibilitätshilfen, um sicherzustellen, dass Ihre App weiterhin das richtige Verhalten erhält. Erweiterte Farbbasierte Apps sollten von der direkten Interaktion mit Anzeige-ICC-Profilen weggehen, da Windows Ersatz-APIs für die App bereitstellt, die das Profil abstrahieren. Eine vollständige Anleitung finden Sie unter Verwenden von DirectX mit erweiterter Farbe auf Dynamischen Bildschirmen mit hohem Standardstandard.

In diesem Thema werden die Änderungen des ICC-Profilverhaltens beschrieben. Wenn Ihre farbverwaltete App weiterhin ANZEIGE-ICC-Profile verwenden muss, zeigt dieses Thema außerdem, wie Sie Ihre App so anpassen, dass sie die Erweiterten Farbvorteile inkrementell nutzen kann.

Älteres Windows-Farbverwaltungsverhalten

Wenn Erweiterte Farbe inaktiv ist, führt Windows keine Farbverwaltung für die visuelle Inhaltsausgabe Ihrer App durch (z. B. GDI hDC, DirectX-Swapchain oder Kompositionsvisual). in der Praxis wird davon ausgegangen, dass sich Ihre App-Inhalte im Standardmäßigen sRGB-Farbraum befinden. Wenn Sie eine genaue Farbwiedergabe auf dem aktiven Display wünschen, muss Ihre App eine eigene Farbverwaltung durchführen, die am häufigsten ICC-Farbprofile (International Color Consortium) verwendet. Die Standard konzeptionellen Schritte sind:

  1. Rufen Sie die Farbeigenschaften des Displays ab.
  2. Führen Sie eine Farbraumkonvertierung in den Farbraum des Displays durch.
  3. Führen Sie eine Gamutzuordnung durch, um den Anzeigeumfang einzuschränken.

Hier finden Sie weitere Details zu ech der drei Schritte.

Abrufen der Farbeigenschaften des Displays

Eine Win32-App verwendet die Profilverwaltungsfunktionen des Windows-Farbsystems , um das Standard-ICC-Profil abzurufen, das Ihnen die Farbeigenschaften des Displays einschließlich des verfügbaren Farbraums anzeigt.

Eine Universelle Windows-Plattform-App verwendet stattdessen die DisplayInformation.GetColorProfileAsync-Methode.

Durchführen der Farbraumkonvertierung in den Farbraum des Displays

Wenn der Farbraum der Anzeige nicht mit dem Farbraum Ihres Inhalts übereinstimmt, müssen Sie eine Farbraumkonvertierung durchführen. Beispielsweise werden digitale Inhalte häufig als sRGB codiert, aber Ihre Anzeige kann DCI-P3 mit großem Farbraum aufweisen. In der Regel verwenden Sie eine ICC-Farbverwaltungsbibliothek, die das ICC-Profil liest und die Farbwerte Ihres Inhalts entsprechend transformiert. Windows bietet mehrere ICC-Farbverwaltungs-Engines. Beispielsweise der Direct2D-Farbverwaltungseffekt.

Es ist wichtig zu beachten, dass die auf ICC-Profilen basierende Farbverwaltung anzeige- oder ausgabebezogen ist. Das bedeutet, dass Farbwerte nicht als absolute (szenenbezogene) Farben gespeichert werden, sondern stattdessen relativ zum Farbraum des Displays (dem Ausgabegerät) codiert werden. Wenn Ihre App beispielsweise sRGB rot rendert, wird dies wie RGB(1, 0, 0) in Ihrer gerenderten Ausgabe dargestellt. Wenn Sie diesen Inhalt jedoch auf einem Adobe RGB-Display rendern RGB(1, 0, 0) , wird das Display einfach als sein am meisten gesättigtes Rot (Adobe RGB rot) interpretiert, was falsch ist. Wenn Sie eine ICC-Farbtransformation anwenden, wird die Farbe als RGB(0.858659, 0, 0)neu codiert. Wenn diese von der Adobe RGB-Anzeige gerendert wird, wird sie ordnungsgemäß als sRGB rot reproduziert.

Durchführen einer Gamutzuordnung zur Einschränkung des Anzeigeumfangs

Zusätzlich zum Neuinterpretieren von Farbwerten, die dem Farbraum des Displays entsprechen, müssen Sie den Fall behandeln, in dem die Anzeige nicht alle Farben in Ihrem Inhalt physisch reproduzieren kann. , wenn der Farbraum Ihres Inhalts größer als der des Bildschirms ist. Dieser Prozess wird als Gamutzuordnung bezeichnet.

Die Zuordnung des Gamuts ist verlustbehaftet, da Sie einen Kompromiss bei der Annäherung an die größere Bandbreite des Inhalts treffen müssen. Die einfachste Methode ist colorimetric, bei der Farben, die sich innerhalb des Farbraums der Anzeige befinden, beibehalten werden, und Farben, die außerhalb des Farbraums liegen, auf den nächstgelegenen Farbraumwert abgeschnitten werden.

In einem auf ICC-Profilen basierenden Workflow wird die Farbraumzuordnung in der Regel automatisch in der Farbverwaltungsbibliothek behandelt. Sie haben eine gewisse Kontrolle über das Zuordnungsverhalten, indem Sie die Renderingabsicht auswählen (siehe Rendering-Absichtsmodi).

Hinweis

Wenn Sie sich in einem erweiterten Farbworkflow befinden, wird in der Regel nicht empfohlen, die Wahrnehmungsrenderingabsicht zu verwenden, weder für quelle noch für das Ziel, da sie für SDR-Quellen und -Ziele konzipiert wurde, die eine geringere Farbskala aufweisen als die, die für HDR und einige WCG-Displays verwendet werden. die Verwendung kann daher zu unerwartetem Verhalten führen.

Automatische Windows-Systemfarbverwaltung

Wenn Erweiterte Farbe aktiv ist, führt Windows eine automatische Systemfarbverwaltung durch. Dadurch wird sichergestellt, dass der Farbinhalt Ihrer App auf dem Display genau reproduziert wird. Dies vereinfacht die erforderlichen Aktionen für Ihre App erheblich, obwohl erweiterte Apps möglicherweise weiterhin zusätzliche Verarbeitungen durchführen, um maximale Farb- und Wahrnehmungsgenauigkeit zu ermöglichen. Weitere Informationen finden Sie unter Verwenden von DirectX mit erweiterter Farbe auf Dynamischen Bildschirmen mit hohem/Standardbereich.

Abrufen der Farbeigenschaften des Displays

Erweiterte Farbbasierte Apps sollten nicht direkt mit dem ANZEIGE-ICC-Profil interagieren. Stattdessen können Sie die Farbeigenschaften des Displays mithilfe von DisplayInformation::GetAdvancedColorInfo oder IDXGIOutput6 abrufen.

Durchführen der Farbraumkonvertierung in den Farbraum des Displays

Windows führt die Farbraumkonvertierung in den Farbraum der Anzeige durch, der durch das aktuelle Standardfarbprofil bestimmt wird. Wenn kein Profil vorhanden ist, werden EDID-Farbmetrikdaten verwendet. Ihre App erhält automatisch szenenbezogenes Farbverhalten– wenn Sie z. B. sRGB rot codiert als RGB(1, 0, 0) rendern und in einem Adobe RGB-Monitor anzeigen, wird es von Windows ordnungsgemäß als sRGB rot reproduziert. Erweiterte Farbbasierte Apps sollten ihre Inhalte mit dem richtigen Farbraum markieren, um Windows mithilfe von IDXGISwapChain3::SetColorSpace1 zu informieren. Für alle Apps, die nicht für erweiterte Farben geeignet sind, die in ein ganzzahliges Standardpixelformat gerendert werden (z. B. 8-Bit-RGBA), behandelt Windows die App explizit als sRGB. Wenn Sie AdobeRGB rot in einem Szenario mit erweiterter Farbe rendern möchten, müssen Sie in einer mit scRGB getaggten Oberfläche rendern RGB(1.158157,0,0) (dies ist durch den Farbraum der Anzeige eingeschränkt).

Durchführen einer Gamutzuordnung zur Einschränkung des Anzeigeumfangs

Die Anzeigepipeline der GPU führt numerische Beschneidungen für Farben außerhalb des Farbraums durch. Wenn Ihre App eine komplexere Zuordnung verwenden möchte, müssen Sie dies selbst tun.

Standardverhalten des ICC-Profils mit erweiterter Farbe

Die automatische Systemfarbverwaltung wirkt sich notwendigerweise auf das Verhalten vorhandener ICC-profilbasierter Apps aus, da sie viele Aktionen selbst ausführen, die jetzt vom Betriebssystem verarbeitet werden. Windows wendet das Standardverhalten (unten beschrieben) auf ICC-profilbasierte Apps an. Dadurch wird sichergestellt, dass diese Apps kein falsches Verhalten aufweisen. Ohne weitere Arbeit erhalten sie jedoch keinen Zugriff auf die erweiterten Farbfunktionen.

Insbesondere ist Ihre ICC-profilbasierte App standardmäßig auf den sRGB-Gamut beschränkt, auch wenn der Monitor tatsächlich eine größere Bandbreite aufweist. Windows bietet auch ein ICC-Kompatibilitätshilfsprogramm, das Ihrer ICC-App Zugriff auf den gesamten Bildschirmumfang ermöglichen kann. Weitere Informationen finden Sie im Abschnitt Kompatibilitätshilfsprogramm zur Anzeige von ICC-Profilen in diesem Thema.

Abrufen der Farbeigenschaften des Displays

Wenn Advanced Color aktiv ist, geben alle Aufrufe der Farbprofilverwaltungs-APIs zum Abrufen des Standardprofils für eine Anzeige "kein Profil" zurück, unabhängig davon, welche Profile tatsächlich installiert sind. Gemäß der Konvention sollte "kein Profil" als sRGB interpretiert werden.

Anzeige-ICC-Profile sind weiterhin gültig und werden mit erweiterter Farbe verwendet, aber sie werden nur auf Systemebene verwendet, und die meisten Apps sollten nicht direkt mit ihnen interagieren. Die folgenden Informationen werden in der Regel nur benötigt, wenn Ihre App ein Hilfsprogramm ist, das alle Anzeigeprofile auflistet oder Profile erstellt/installiert.

Um dies zu erzwingen, fügt Windows das Konzept und STANDARDEXTENDED die Farbprofiluntertypen hinzu. Dies gilt für alle Farbprofilverwaltungs-APIs, die den COLORPROFILESUBTYPE verwenden:

CPST_STANDARD_DISPLAY_COLOR_MODE
CPST_EXTENDED_DISPLAY_COLOR_MODE

Hinweis

STANDARD und EXTENDED Untertypen sind keine Im Profil selbst gespeicherte Eigenschaft, sondern gelten für die Zuordnung des Profils zu einer Anzeige (d. a. wenn das Profil der Profilzuordnungsliste der Anzeige hinzugefügt wird). Ein einzelnes Profil kann sowohl mit als auch STANDARDEXTENDED mit Untertypen für eine Anzeige verknüpft werden, was bedeutet, dass es sowohl für Standard- als auch für Erweiterte Farbszenarien verfügbar ist.

Anzeigeprofilzuordnungen, die für die Verwendung in SDR vorgesehen sind – unabhängig davon, ob es sich um reguläre SDR oder erweiterte Farb-SDR handelt – verfügen über einen Untertyp STANDARD (der Standardwert von thiat, wenn kein Wert angegeben ist). Anzeigeprofilzuordnungen für die Verwendung im HDR-Modus sind der Untertyp EXTENDED. Wenn Ihre App keinen Untertyp angibt, wird dies als STANDARDinterpretiert.

Jede Getter-API , die COLORPROFILESUBTYPE verwendet, gibt nur Profile mit dem übereinstimmenden STANDARD oder EXTENDED Untertyp zurück. Wenn HDR beispielsweise aktiv ist, sind die einzigen Anzeigeprofile mit dem Untertyp für die EXTENDED Verwendung gültig, und STANDARD Untertypprofile werden nicht verwendet. Setter APIs können den Untertyp angeben (STANDARD ist der Standard).

Durchführen der Farbraumkonvertierung in den Farbraum des Displays

Da die ICC-Profilverwaltungs-APIs sRGB zurückgeben, wenn Advanced Color aktiv ist, wird Ihre icc-profilbasierte App farblich in sRGB verwaltet, und Windows reproduziert dies ordnungsgemäß als sRGB auf dem Display.

Durchführen einer Gamutzuordnung zur Einschränkung des Anzeigeumfangs

Alle vorhandenen Verhaltensweisen für die Gamutzuordnung werden beibehalten.

Icc-Profilkompatibilitätshilfsprogramm anzeigen

Wenn Erweiterte Farbe aktiv ist, bietet Windows ein Kompatibilitätshilfsprogramm zum Anzeigen von ICC-Profilen, das Zugriff auf den gesamten Farbraum der Anzeige bietet. Auf diese Weise erhält Ihre App weiterhin genaue und breite Farbskala bis zur gemeldeten Funktion des Displays – die gleiche Funktionalität, die heute für kalibrierte Monitore mit großem Farbraum im älteren Modus ohne erweiterte Farbe verfügbar ist. Ohne dieses Hilfsprogramm ist Ihre App auf das Standardverhalten sRGB beschränkt (siehe Standardverhalten des ICC-Profils mit erweiterter Farbe).

Dieses Hilfsprogramm ist ab Windows 11 verfügbar. Es bietet keine anderen Vorteile von Advanced Color, einschließlich des Zugriffs auf höhere Genauigkeit/Bittiefe oder einen hohen dynamischen Bereich. Sie müssen Ihre App so ändern, dass sie erweiterte Farben berücksichtigt.

Aktivieren des Anzeige-ICC-Kompatibilitätshilfsprogramm

Das Anzeige-ICC-Kompatibilitätshilfsprogramm ist appbezogen aktiviert. Die Aktivierung erfolgt nicht standardmäßig.

Benutzer können sie für eine App aktivieren, indem Sie zur Registerkarte Kompatibilität der Eigenschaften der ausführbaren Datei wechseln und die Option Icc-Farbverwaltung für Legacyanzeige verwenden auswählen. Das Kompatibilitätshilfsprogramm wird auf den gesamten Prozess angewendet und ist nur aktiv, wenn erweiterte Farbe für die Anzeige aktiviert ist. Es hat keine Auswirkungen auf eine Standard-SDR-Anzeige.

Benutzeroberfläche zum Aktivieren des Anzeige-ICC-Kompatibilitätshilfsprogrammes für eine ausführbare Datei

Windows aktiviert das Hilfsprogramm automatisch für einige beliebte Apps, von denen bekannt ist, dass sie die ICC-Farbprofilverwaltung verwenden.

Es gibt keine programmgesteuerte Möglichkeit, diesen Kompatibilitätshilfsprogramm für Ihre App zu aktivieren.

Abrufen der Farbeigenschaften der Anzeige

Wenn das Kompatibilitätshilfsprogramm aktiv ist, erstellt Windows beim Abfragen des Standardfarbprofils STANDARD mithilfe der Windows Color System-Profilverwaltungsfunktionen ein synthetisches ICC-Profil mit den gleichen Daten, die auch die APIs für erweiterte Farbanzeigefunktionen auffüllen. Die Daten des synthetischen Profils können aus einer Kombination des aktuellen Farbprofils, aus der EDID oder DisplayID der Anzeige oder aus anderen Quellen stammen.

Wenn Ihre App das Standardfarbprofil EXTENDED abfragt, bedeutet dies, dass Ihre App für erweiterte Farben geeignet ist und das tatsächliche EXTENDED Profil erhält.

Durchführen einer Farbraumkonvertierung in den Farbraum der Anzeige

Wenn das Kompatibilitätshilfsprogramm aktiv ist, wird erwartet, dass Ihre App die ICC-Farbverwaltung verwendet, um das synthetische Anzeigeprofil als Ziel zu verwenden. Windows geht davon aus, dass Ihre App auf diesen Farbraum ausgerichtet ist, und führt die richtige Farbraumkonvertierung durch, um sicherzustellen, dass er auf der Anzeige korrekt gerendert wird.

Die Farbraumkonvertierung gilt für den gesamten App-Prozess, sodass der gesamte visuelle Inhalt Ihrer App als Ziel des Farbraums der Anzeige behandelt wird, auch wenn einige davon nicht farbverwaltet sind und nominell auf sRGB ausgerichtet sind (z. B. UI). Die Farbraumkonvertierung wird auch unabhängig von der Grafik-API (GDI, DirectX, XAML usw.), dem Pixelformat oder anderen Merkmalen des gerenderten Inhalts angewendet.

Durchführen einer Gamutzuordnung zur Einschränkung auf den Anzeigeumfang

Jedes vorhandene Gamutzuordnungsverhalten wird beibehalten.

Änderungen des benutzerseitig sichtbaren Verhaltens

Benutzer können überprüfen, ob das Anzeige-ICC-Kompatibilitätshilfsprogramm für eine ausführbare Datei aktiv ist, indem sie die Registerkarte Kompatibilitätseigenschaften überprüfen. Wenn In Ihrer App Informationen zum ICC-Standardprofil angezeigt werden, sehen Benutzer, dass es sich um ein synthetisches Profil handelt. Der beschreibende Inhalt des Profils (einschließlich des Namens) ist ein Implementierungsdetail.

Das tatsächliche Farbverhalten sollte mit dem identisch sein, wenn Erweiterte Farbe deaktiviert ist. In beiden Fällen rendert Ihre App genaue Farben, die auf die gesamte Bandbreite der Anzeige zugreifen können, wie im ICC-Profil beschrieben.