Anpassungseffekt auf weißer Ebene
Mit diesem Effekt kann die Weißebene eines Bilds linear skaliert werden. Dies ist besonders hilfreich, wenn Sie zwischen anzeigebewiesenem Leuchtdichteraum und szenenbezogenem Leuchtdichteraum konvertieren oder umgekehrt.
Die Eigenschaften für diesen Effekt werden durch die D2D1_WHITELEVELADJUSTMENT_PROP-Enumeration identifiziert, und die CLSID wird CLSID_D2D1WhiteLevelAdjustment.
Effekteigenschaften
Anzeigename und Indexaufzählung | Typ und Standardwert | BESCHREIBUNG |
---|---|---|
InputWhiteLevel, D2D1_WHITELEVELADJUSTMENT_PROP_INPUT_WHITE_LEVEL | GLEITKOMMAZAHL | Die Weißebene des Eingabebilds in Nits. |
OutputWhiteLevel, D2D1_WHITELEVELADJUSTMENT_PROP_OUTPUT_WHITE_LEVEL | GLEITKOMMAZAHL | Der Weißwert des Ausgabebilds in Nits. |
Bemerkungen
Dieser Effekt soll mit dem HDR-Farbkarteneffekt kombiniert werden, damit Sie HDR-Bilder in Direct2D mit der richtigen Farbverwaltung und Tonzuordnung rendern können. Weitere Informationen finden Sie in den Anmerkungen zu diesem Thema. Die Effekte richten sich an jedes Framework, das eine erstklassige HDR-Bildanzeige bieten möchte, die alle Windows HDR-Bildformate verarbeitet und sich an die Funktionen des Displays anpasst (unabhängig davon, ob es sich um HDR oder WCG/SDR handelt).
Unter Windows wird davon ausgegangen, dass sich alle SDR/WCG-Inhalte in einem anzeigebezogenen Leuchtdichtebereich befinden, was bedeutet, dass der Weißgrad des Inhalts auf den Weißgrad des Displays hochskaliert werden sollte, bevor er letztendlich angezeigt wird. Dies liegt jedoch nicht immer in der Verantwortung Ihrer Anwendung. Im Gegensatz dazu wird davon ausgegangen, dass sich HDR-Inhalte in einem von szenenbezogenen Luminanzraum befinden, was bedeutet, dass er letztendlich nicht so skaliert werden sollte, dass er dem Weißwert des Displays entspricht. Allerdings muss Ihre Anwendung möglicherweise beim Rendern von HDR-Inhalten unter bestimmten Umständen Eine Skalierung durchführen, um sicherzustellen, dass dies das Nettoergebnis ist.
Wenn sich der Windows-Desktop im SDR- oder WCG-Modus befindet, wird der Desktop in einem anzeigebezogenen Leuchtdichtebereich zusammengesetzt. Wenn sich der Windows-Desktop jedoch im HDR-Modus befindet, erfolgt die Desktopkomposition im von Szenen bezeichneten Leuchtdichteraum. Allerdings führt der Desktopfenster-Manager (DWM) selbst Luminanzanpassungen (oft als SDRBoost bezeichnet) für 8-Bit-Kompositionsoberflächen durch, was Ihre Anwendung für diesen Fall vereinfacht. Dennoch bedeutet die automatische Verstärkung, dass die Rolle Ihrer Anwendung bei der Konvertierung von einem Luminanzraum in einen anderen vom Kompositionsformat abhängt, das Ihre Anwendung zum Präsentieren des Inhalts verwendet.
In der folgenden Tabelle werden die Fälle beschrieben, in denen Ihre Anwendung eine Anpassung auf weißer Ebene durchführen sollte und nicht, und welche Anpassungen erforderlich sind. Im Allgemeinen hängt die Anpassung von drei Faktoren ab.
- Eingabe des Inhaltsfarbraums. Gibt an, ob Ihr Eingabeinhalt HDR-Luminanzwerte (High Dynamic Range) enthält oder nicht. WCG-Inhalte verhalten sich hinsichtlich des Leuchtdichteverhaltens identisch mit SDR.
- Kompositionsformat. Das Pixelformat der Zieloberfläche, das dem DWM angezeigt wird, z. B. eine Swapchain oder eine Kompositionsoberfläche. Beim Rendern mit Direct2D ist dies entweder UINT8 oder FP16.
- Erweiterter Desktopfarbmodus. Gibt an, ob der DWM im SDR-, WCG- oder HDR-Modus für die aktuelle Anzeige ausgeführt wird. Rufen Sie diese Informationen über DXGI_OUTPUT_DESC1::ColorSpace oder AdvancedColorInfo.CurrentAdvancedColorKind ab.
Basierend auf diesen drei Faktoren sollten Sie die entsprechenden Werte für die InputWhiteLevel
Eigenschaften und OutputWhiteLevel
festlegen.
Eingabeinhalt | Kompositionsformat | Erweiterter Farbmodus | InputWhiteLevel | OutputWhiteLevel |
---|---|---|---|---|
SDR/WCG | UINT8 | Any | – | – |
SDR/WCG | RP16 | SDR/WCG | – | – |
SDR/WCG | RP16 | HDR | SDRWhite | 80 |
HDR | Any | SDR/WCG | 80 | DXGI_OUTPUT_DESC1::MaxLuminance |
HDR | UINT8 | HDR | 80 | SDRWhite |
HDR | RP16 | HDR | – | – |
In der Tabelle ist der Wert 80 die Referenzweißebene in Nits für sRGB- oder scRGB-Inhalte. Dazu können Sie die Konstante D2D1_SCENE_REFERRED_SDR_WHITE_LEVEL verwenden, die in d2d1effects_2.h
definiert ist. Der Wert SDRWhite
ist die Anzahl der Nits, die die Anzeige verwenden soll, um weiße sRGB-Inhalte anzuzeigen. Sie können diesen Wert abrufen, indem Sie auf die AdvancedColorInfo.SdrWhiteLevelInNits-Eigenschaft zugreifen. Der Wert N/A bedeutet, dass in diesem Szenario keine Anpassung der Weißebene verwendet wird. Sie können entweder den Effekt aus Dem Diagramm entfernen oder Werte für eine Nicht-Op festlegen.
Beachten Sie, dass in Fällen, in denen die Anwendung keine Anpassung des Weißpegels erfordert, der DWM oder das Display möglicherweise die Konvertierung vom vom Display verwiesenen Leuchtdichteraum in den von Szenen bezeichneten Leuchtdichteraum verarbeitet.
- Im SDR/WCG-Modus erfolgt die Konvertierung nach der DWM-Komposition und gilt für alle Inhalte, die dieser Anzeige angezeigt werden. Die Anzeige führt diese Konvertierung implizit aus.
- Im HDR-Modus wird die Konvertierung automatisch vom DWM vor der Komposition ausgeführt, solange die Kompositionsoberfläche Ihrer Anwendung SDR ist.
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Windows 10, Version 1809 (10,0; Build 17763) [Desktop-Apps | UWP-Apps] |
Header | d2d1effects_2.h |
Bibliothek | d2d1.lib, dxguid.lib |