Поделиться через


Эффект корректировки уровня белого цвета

Этот эффект позволяет линейно масштабировать изображение на белом уровне. Это особенно полезно при преобразовании между пространством света, на который ссылается дисплей, и пространством, на который ссылается сцена, или наоборот.

Свойства этого эффекта определяютсяперечислениемD2D1_WHITELEVELADJUSTMENT_PROP, а CLSID — CLSID_D2D1WhiteLevelAdjustment.

Свойства эффекта

Отображаемое имя и перечисление индексов Тип и значение по умолчанию Описание
InputWhiteLevel, D2D1_WHITELEVELADJUSTMENT_PROP_INPUT_WHITE_LEVEL ПЛАВАТЬ Белый уровень входного изображения в нитках.
OutputWhiteLevel, D2D1_WHITELEVELADJUSTMENT_PROP_OUTPUT_WHITE_LEVEL ПЛАВАТЬ Белый уровень выходного изображения в нитках.

Замечания

Этот эффект предназначен для объединения с эффектом карты тонов HDR, чтобы обеспечить отображение изображений HDR в Direct2D с правильным сопоставлением цветов и тонов. Дополнительные сведения см. в примечаниях этой статьи. Эффекты предназначены для любой платформы, которая хочет обеспечить лучший в классе интерфейс просмотра изображений HDR, который обрабатывает все форматы изображений Windows HDR и адаптируется к возможностям дисплея (будь то HDR или WCG/SDR).

В Windows предполагается, что все содержимое SDR/WCG находится в пространстве света со ссылкой на дисплей, что означает, что белый уровень содержимого должен быть масштабирован до белого уровня дисплея, прежде чем он будет представлен в конечном итоге. Однако это не всегда ответственность за ваше приложение. В отличие от этого, предполагается, что содержимое HDR находится в пространстве света со ссылкой на сцену, что означает, что оно не должно в конечном итоге масштабироваться, чтобы соответствовать белому уровню дисплея. Это значит, что приложению может потребоваться выполнить масштабирование в некоторых случаях при отрисовке содержимого HDR, чтобы убедиться, что это чистый результат.

Если рабочий стол Windows находится в режиме SDR или WCG, рабочий стол состоит в пространстве света, на котором ссылается дисплей. Но если рабочий стол Windows находится в режиме HDR, то композиция рабочего стола происходит в пространстве света, на котором ссылается сцена. Тем не более чем диспетчер окон рабочего стола (DWM) выполняет корректировки света (часто называемые SDRBoost) для 8-разрядных поверхностей композиции, и это упрощает приложение для этого случая. Даже поэтому автоматическое повышение означает, что роль приложения в преобразовании из одного пространства света в другую зависит от формата композиции, используемого приложением для представления его содержимого.

В приведенной ниже таблице описываются случаи, когда приложение должно и не должно выполнять корректировку уровня белого цвета, а также то, что следует корректировать. Как правило, корректировка зависит от трех факторов.

  1. Пространство цветов содержимого ввода. Содержит ли входное содержимое значения яркости с высоким динамическим диапазоном (HDR). Содержимое WCG ведет себя так же, как ИДР для поведения светимости.
  2. Формат композиции. Формат пиксельной поверхности целевой поверхности, представленной в DWM, например цепочке буферов или поверхности композиции . При отрисовке с помощью Direct2D это либо UINT8, либо FP16.
  3. Расширенный цветовой режим рабочего стола. Работает ли DWM в режиме SDR, WCG или HDR для текущего дисплея. Получите эти сведения с помощью DXGI_OUTPUT_DESC1::ColorSpace или AdvancedColorInfo.CurrentAdvancedColorKind.

На основе этих трех факторов необходимо задать соответствующие значения для свойств InputWhiteLevel и OutputWhiteLevel.

Входное содержимое Формат композиции Расширенный цветной режим InputWhiteLevel OutputWhiteLevel
SDR/WCG UINT8 Любой N/A N/A
SDR/WCG FP16 SDR/WCG N/A N/A
SDR/WCG FP16 HDR SDRWhite 80
HDR Любой SDR/WCG 80 DXGI_OUTPUT_DESC1::MaxLuminance
HDR UINT8 HDR 80 SDRWhite
HDR FP16 HDR N/A N/A

В таблице значение 80 — это эталонный белый уровень(в нитах) для содержимого sRGB или scRGB. Для этого можно использовать константную D2D1_SCENE_REFERRED_SDR_WHITE_LEVEL, которая определена в d2d1effects_2.h. Значение SDRWhite — это количество нит, которое должно использоваться для отображения белого содержимого sRGB. Это значение можно получить, доступ к свойству AdvancedColorInfo.SdrWhiteLevelInNits. Значение N/A означает, что корректировка уровня белого цвета не используется в этом сценарии; вы можете удалить эффект из графа или задать значения для no-op.

Обратите внимание, что в случаях, когда для приложения не требуется корректировка уровня белого цвета, dwM или дисплей могут обрабатывать преобразование из пространства света, на который ссылается отображение, в пространство света, на которое ссылается сцена.

  • В режиме SDR/WCG преобразование происходит после композиции DWM и применяется ко всему содержимому, представленному на этом дисплее. Отображение неявно выполняет это преобразование.
  • В режиме HDR преобразование выполняется автоматически DWM перед композицией, пока область композиции приложения — SDR.

Требования

Требование Ценность
Минимальный поддерживаемый клиент Windows 10 версии 1809 (10.0; Сборка 17763) [классические приложения | Приложения UWP]
Заголовок d2d1effects_2.h
Библиотека d2d1.lib, dxguid.lib