使用高级颜色的 ICC 配置文件行为

高级颜色是 OS 技术的一个总术语,适用于颜色保真度明显高于标准显示器的显示器。 有关详细信息,请参阅在 高/标准动态范围显示器上使用 DirectX 和高级颜色。 高级颜色和自动颜色管理可确保所有应用(包括旧版和新式应用)的一致和色度准确显示颜色。 但是,你的应用可能已经使用国际颜色联盟 (ICC) 颜色配置文件来执行自己的显式颜色管理。

当高级颜色在 SDR 或 HDR 显示器上处于活动状态时,显示 ICC 配置文件的行为会以非向后兼容的方式更改。 如果你的应用使用显示 ICC 配置文件,则 Windows 会提供兼容性帮助程序,以确保你的应用继续获得正确的行为。 高级颜色感知应用应从直接与显示 ICC 配置文件交互过渡,因为 Windows 提供替换面向应用的 API,可提取配置文件;有关完整指南,请参阅 在高/标准动态范围显示器上使用 DirectX 与高级颜色

本主题介绍 ICC 配置文件行为中的更改。 此外,如果颜色管理的应用需要继续使用显示 ICC 配置文件,则本主题将介绍如何调整应用以增量方式利用高级颜色优势。

旧版 Windows 颜色管理行为

当高级颜色处于非活动状态时,Windows 不会对应用的视觉内容输出执行任何颜色管理, (例如 GDI hDC、DirectX 交换链或合成视觉对象) ;实际上,它假定应用内容位于标准 sRGB 颜色空间中。 如果想要在活动显示器上准确再现颜色,则应用必须执行自己的颜色管理,通常使用国际颜色联盟 (ICC) 颜色配置文件。 main概念步骤如下:

  1. 获取显示器的颜色特征。
  2. 将颜色空间转换为显示器的颜色空间。
  3. 执行声域映射,以限制到显示器的域。

下面是有关这三个步骤的更多详细信息。

获取显示器的颜色特征

Win32 应用使用 Windows 颜色系统配置文件管理功能 获取默认的 ICC 配置文件,该配置文件可告诉你显示器的颜色特征,包括其可用的色域。

通用 Windows 平台应用改用 DisplayInformation.GetColorProfileAsync 方法

将颜色空间转换为显示器的颜色空间

如果显示器的颜色空间与内容的颜色空间不匹配,则必须执行颜色空间转换。 例如,数字内容通常编码为 sRGB,但显示器可能是宽范围 DCI-P3。 你通常使用一个 ICC 颜色管理库,该库读取 ICC 配置文件,并转换内容的颜色值以匹配。 Windows 提供了多个 ICC 颜色管理引擎;例如 Direct2D 颜色管理效果

请务必注意,基于 ICC 配置文件的颜色管理是 显示引用输出引用的。 这意味着颜色值不会存储为绝对 (场景引用) 颜色,而是相对于输出设备) (显示的颜色空间进行编码。 例如,如果你的应用正在呈现红色 sRGB,则表示为 RGB(1, 0, 0) 在呈现的输出中。 但是,如果要在 Adobe RGB 显示器上呈现该内容,则 RGB(1, 0, 0) 显示器只需将它解释为其最饱和的红色 (Adobe RGB 红色) ,这是不正确的。 应用 ICC 颜色转换时,它会将颜色重新编码为 RGB(0.858659, 0, 0),当 Adobe RGB 显示器呈现该颜色时,它将正确再现为 sRGB 红色。

执行声域映射以限制到显示器的声域

除了重新解释颜色值以匹配显示器的颜色空间外,还需要处理显示器无法以物理方式重现内容中的所有颜色的情况:如果内容的色域大于显示器的色域,则为 。 该过程称为“域映射”。

范围映射是有损的,因为必须权衡如何近似内容的较大范围。 最简单的方法是比色法,其中将保留显示器色域内的颜色,而色域外的颜色将剪裁为最近的色域内值。

在基于 ICC 配置文件的工作流中,通常会自动在颜色管理库中处理色域映射。 通过选择呈现意向 (请参阅) 呈现意向模式 ,可以控制映射行为。

注意

当你使用高级颜色工作流时,我们通常不建议使用感知渲染意向,无论是源还是目标,因为它专为色域小于 HDR 和某些 WCG 显示器的 SDR 源和目标而设计;因此,使用它们可能会导致意外行为。

Windows 自动系统颜色管理

当“高级颜色”处于活动状态时,Windows 会执行自动系统颜色管理,确保应用的颜色内容在显示器上准确再现。 这极大地简化了对应用的必要操作,尽管高级应用可能会继续执行其他处理,以获得最大的颜色和感知准确性。 有关详细信息,请参阅在 高/标准动态范围显示器上使用 DirectX 和高级颜色

获取显示器的颜色特征

高级颜色感知应用不应直接与显示 ICC 配置文件交互。 相反,可以使用 DisplayInformation::GetAdvancedColorInfoIDXGIOutput6 获取显示器的颜色属性。

将颜色空间转换为显示器的颜色空间

Windows 将执行颜色空间转换为由当前默认颜色配置文件确定的显示器颜色空间。 如果没有配置文件,则将使用 EDID 色法数据。 你的应用会自动获取 场景引用 的颜色行为,例如,如果将 sRGB 红色编码为 RGB(1, 0, 0) 呈现并显示到 Adobe RGB 监视器,则 Windows 将正确将其再现为 sRGB 红色。 高级颜色感知应用应使用正确的颜色空间标记其内容,以便使用 IDXGISwapChain3::SetColorSpace1 通知 Windows。 对于呈现为标准整数像素格式 ((例如 8 位 RGBA) )的所有非高级颜色感知应用,Windows 会将该应用显式视为 sRGB。 如果要在高级颜色方案中呈现 AdobeRGB 红色,则需要在带 scRGB 标记的图面中呈现 RGB(1.158157,0,0) , (受显示器的色域) 约束。

执行声域映射以限制到显示器的声域

GPU 的显示管道将对色域外的颜色执行数值剪裁。 如果你的应用希望使用更复杂的映射,则需要自己执行此操作。

使用高级颜色的 ICC 配置文件默认行为

自动系统颜色管理必然影响基于 ICC 配置文件的现有应用的行为方式,因为它们本身正在执行许多操作,这些操作现在由操作系统 (OS.) Windows 将下述默认行为 () 应用于基于 ICC 配置文件的应用。 这可确保这些应用不会有不正确的行为。 但是,如果不做进一步的工作,他们将无法访问任何扩展的颜色功能。

具体而言,默认情况下,基于 ICC 配置文件的应用仅限于 sRGB 范围,即使监视器实际上范围更宽。 Windows 还提供 ICC 兼容性帮助程序,可让 ICC 应用访问显示器的整个范围。 有关详细信息,请参阅本主题中的 显示 ICC 配置文件兼容性帮助程序 部分。

获取显示器的颜色特征

当“高级颜色”处于活动状态时,无论实际安装了哪些配置文件,任何调用颜色配置文件管理 API 以获取显示的默认配置文件都将返回“无配置文件”。 按照约定,“无配置文件”应解释为 sRGB。

显示 ICC 配置文件仍然有效,并与高级颜色一起使用,但它们仅在系统级别使用,并且大多数应用不应直接与它们交互。 仅当应用是枚举所有显示配置文件的实用工具,或者正在创作/安装配置文件时,通常才需要以下信息。

为了强制实施这一点,Windows 添加了 和 EXTENDED 颜色配置文件子类型的概念STANDARD。 这适用于使用 COLORPROFILESUBTYPE 的任何颜色配置文件管理 API:

CPST_STANDARD_DISPLAY_COLOR_MODE
CPST_EXTENDED_DISPLAY_COLOR_MODE

注意

STANDARDEXTENDED 子类型不是存储在配置文件本身中的属性;而是应用于配置文件与显示 (的关联,即在将配置文件添加到显示配置文件关联列表) 。 单个配置文件可以与 STANDARD 显示器的 和 EXTENDED 子类型相关联,这意味着它可以同时用于标准和高级颜色方案。

如果) 未指定值,则打算在 SDR 中使用的显示配置文件关联(无论是常规 SDR 还是高级颜色 SDR)都有子类型 STANDARD (thiat 的默认值。 在 HDR 模式下使用的显示配置文件关联是子类型 EXTENDED。 如果应用未指定子类型,则会将其解释为 STANDARD

任何使用 COLORPROFILESUBTYPE 的 getter API 将仅返回具有匹配 STANDARDEXTENDED 子类型的配置文件。 例如,如果 HDR 处于活动状态,则具有子类型的唯一显示配置文件 EXTENDED 可供使用,并且 STANDARD 不使用子类型配置文件。 Setter API 可以指定子类型, STANDARD (是默认) 。

将颜色空间转换为显示器的颜色空间

由于当“高级颜色”处于活动状态时,ICC 配置文件管理 API 将返回 sRGB,因此基于 ICC 配置文件的应用将颜色管理为 sRGB,Windows 会在显示器上正确将其重现为 sRGB。

执行声域映射以限制到显示器的声域

保留任何现有的域映射行为。

显示 ICC 配置文件兼容性帮助程序

当“高级颜色”处于活动状态时,Windows 为显示 ICC 配置文件提供兼容性帮助程序,用于访问显示器的整个色域。 这样一来,你的应用可以继续获得准确和宽色域颜色,直到显示报告的功能,这与目前在旧版非高级颜色模式下的校准宽色域监视器上提供的功能相同。 如果没有该帮助程序,你的应用将仅限于默认行为,即 sRGB (使用高级颜色) 查看 ICC 配置文件默认行为

该帮助程序从Windows 11开始可用。 它不提供高级颜色的其他优势,包括访问更高的精度/位深度或高动态范围 - 你需要将应用修改为高级颜色感知。

启用显示 ICC 兼容性帮助程序

显示 ICC 兼容性帮助程序是按应用启用的。 它默认不启用。

用户可以转到可执行文件属性的“兼容性”选项卡,然后选择“ 使用旧显示 ICC 颜色管理”,为应用启用它。 兼容性帮助程序应用于整个过程,并且仅在为显示器启用高级颜色时才处于活动状态,对标准 SDR 显示器没有影响。

用于为可执行文件启用显示 ICC 兼容性帮助程序的 UI

Windows 自动为已知使用 ICC 颜色配置文件管理的一些常用应用启用帮助程序。

没有编程方式为应用启用该兼容性帮助程序。

获取显示器的颜色特征

如果兼容性帮助程序处于活动状态,则当你的应用使用 Windows 颜色系统配置文件管理功能查询默认STANDARD颜色配置文件时,Windows 将使用填充高级颜色显示功能 API 的相同数据构造合成 ICC 配置文件。 合成配置文件的数据可以来自当前颜色配置文件的组合、来自显示器的 EDID 或 DisplayID,或者来自其他源。

如果你的应用查询默认 EXTENDED 颜色配置文件,则表示你的应用是高级颜色感知的,它将接收实际 EXTENDED 配置文件。

执行颜色空间到显示器颜色空间的转换

如果兼容性帮助程序处于活动状态,则你的应用应使用 ICC 颜色管理来面向合成显示配置文件。 Windows 假定你的应用以该颜色空间为目标,并将执行正确的颜色空间转换,以确保它在显示器上准确呈现。

颜色空间转换适用于整个应用进程,因此,应用的所有视觉内容都被视为面向显示器的颜色空间,即使其中一些内容不受颜色管理,并且名义上面向 sRGB (例如 UI) 。 无论图形 API (GDI、DirectX、XAML 等) 、像素格式或呈现内容的其他特征如何,颜色空间转换也会应用。

执行域映射以限制到显示器的域

保留任何现有的域映射行为。

用户可见的行为更改

用户可以通过检查可执行文件的“兼容性属性”选项卡来验证显示 ICC 兼容性帮助程序是否处于活动状态。如果你的应用显示有关默认显示 ICC 配置文件的信息,则用户将看到它是一个综合配置文件。 配置文件的描述性内容 (包括名称) 是实现详细信息。

实际颜色行为应与禁用高级颜色时相同。 在这两种情况下,你的应用都将呈现可以访问整个显示器范围(如 ICC 配置文件中所述)的准确颜色。