白色级别调整效果

此效果允许线性缩放图像的白色级别。 在显示引用亮度空间和场景引用亮度空间之间转换时,这尤其有用,反之亦然。

此效果的属性由 D2D1_WHITELEVELADJUSTMENT_PROP 枚举标识,CLSID CLSID_D2D1WhiteLevelAdjustment

效果属性

显示名称和索引枚举 类型和默认值 描述
InputWhiteLevel,D2D1_WHITELEVELADJUSTMENT_PROP_INPUT_WHITE_LEVEL 输入图像的白色级别(以 nits 为单位)。
OutputWhiteLevel,D2D1_WHITELEVELADJUSTMENT_PROP_OUTPUT_WHITE_LEVEL 输出图像的白色级别(以 nits 为单位)。

言论

此效果旨在与 HDR 音调映射效果 结合使用,以便使用正确的颜色管理和色调映射在 Direct2D 中呈现 HDR 图像。 有关更多详细信息,请参阅该主题 备注。 效果针对的是任何想要提供一流的 HDR 图像查看体验的框架,该体验可处理所有 Windows HDR 图像格式,并适应显示器的功能(无论是 HDR 还是 WCG/SDR)。

在 Windows 上,所有 SDR/WCG 内容都假定位于显示引用的亮度空间中,这意味着内容白色级别应在最终呈现之前纵向扩展到显示器的白色级别。 但是,执行此作并非总是应用程序的责任。 相比之下,HDR 内容假定位于场景引用的亮度空间中,这意味着它不应最终进行缩放以匹配显示器的白色级别。 也就是说,在呈现 HDR 内容时,应用程序可能需要在某些情况下执行缩放,以确保这是净结果。

当 Windows 桌面处于 SDR 或 WCG 模式时,桌面由显示引用的亮度空间组成。 但是,如果 Windows 桌面处于 HDR 模式,则桌面合成发生在场景引用的亮度空间中。 也就是说,桌面窗口管理器(DWM)本身对 8 位合成图面执行亮度调整(通常称为 SDRBoost),这简化了该情况的应用程序。 即便如此,自动提升意味着应用程序从一个亮度空间转换为另一个亮度空间的角色取决于应用程序用来呈现其内容的合成格式。

下表描述了应用程序应执行和不应执行白级调整的情况,以及该调整应是什么情况。 一般情况下,调整取决于三个因素。

  1. 输入内容颜色空间。 输入内容是否包含高动态范围(HDR)亮度值。 对于亮度行为,WCG 内容的行为与 SDR 相同。
  2. 合成格式。 提供给 DWM 的目标图面的像素格式,例如,交换链组合图面。 使用 Direct2D 进行渲染时,UINT8FP16
  3. 桌面高级颜色模式。 DWM 是在当前显示器的 SDR、WCG 还是 HDR 模式下运行。 通过 DXGI_OUTPUT_DESC1::ColorSpaceAdvancedColorInfo.CurrentAdvancedColorKind获取此信息。

根据这三个因素,应为 InputWhiteLevelOutputWhiteLevel 属性设置适当的值。

输入内容 合成格式 高级颜色模式 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 内容的引用白级别(以 nits 为单位)。 为此,可以使用 d2d1effects_2.h中定义的常量 D2D1_SCENE_REFERRED_SDR_WHITE_LEVEL。 值 SDRWhite 是显示白色 sRGB 内容时显示的尼特数。 可以通过访问 AdvancedColorInfo.SdrWhiteLevelInNits 属性来检索此值。 值 N/A 表示在此方案中不使用白色级别调整;可以从图形中删除效果,也可以为 no-op设置值。

请注意,如果应用程序不需要白级调整,DWM 或显示器可能会处理从显示引用亮度空间到场景引用亮度空间的转换。

  • 在 SDR/WCG 模式下,转换发生在 DWM 组合之后,并应用于呈现给该显示器的所有内容。 显示隐式执行此转换。
  • 在 HDR 模式下,只要应用程序的合成图面为 SDR,转换就会由 DWM 自动执行。

要求

要求 价值
支持的最低客户端 Windows 10 版本 1809 (10.0;内部版本 17763) [桌面应用 |UWP 应用]
页眉 d2d1effects_2.h
图书馆 d2d1.lib、dxguid.lib