共用方式為


具有進階色彩的 ICC 配置文件行為

進階色彩是OS技術的傘式字詞,其色彩逼真度明顯高於標準顯示器。 如需詳細資訊,請參閱 在高/標準動態範圍上使用 DirectX 搭配進階色彩顯示。 進階色彩和自動色彩管理可確保所有應用程式的一致且精確顯示色彩:舊版和現代化。 不過,您的應用程式可能已經使用國際色彩聯盟 (ICC) 色彩配置檔來執行自己的明確色彩管理。

當 SDR 或 HDR 顯示器上使用進階色彩時,顯示 ICC 配置檔的行為會以非回溯相容的方式變更。 如果您的 app 適用於顯示 ICC 配置檔,則 Windows 會提供相容性協助程式,以確保您的應用程式會繼續取得正確的行為。 進階色彩感知應用程式應該從與顯示 ICC 配置檔直接互動轉換,因為 Windows 提供取代應用程式面向 API,以抽象化配置檔;如需完整指引,請參閱 在高標準動態範圍上使用 DirectX 搭配進階色彩顯示

本主題描述 ICC 設定檔行為的變更。 此外,如果您的色彩管理應用程式需要繼續使用顯示 ICC 設定檔,本主題將會示範如何調整您的應用程式,以累加方式運用進階色彩優點。

舊版 Windows 色彩管理行為

當進階色彩處於非使用中狀態時,Windows 不會對應用程式的視覺內容輸出執行任何色彩管理(例如,GDI hDC、DirectX 交換鏈結或組合視覺效果):實際上,它會假設您的應用程式內容位於標準 sRGB 色彩空間中。 如果您想要使用中顯示器上的精確色彩重現,則您的應用程式必須執行自己的色彩管理,最常使用國際色彩聯盟(ICC)色彩配置檔。 主要概念步驟如下:

  1. 取得顯示器的色彩特性。
  2. 執行色彩空間轉換成顯示器的色彩空間。
  3. 執行 gamut 對應,以限制顯示的遊戲域。

以下是三個步驟中每個步驟的詳細數據。

取得顯示器的色彩特性

Win32 應用程式會使用 Windows Color System 配置檔管理功能 來取得預設 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 紅色。

執行 gamut 對應以限制顯示的遊戲域

除了重新解譯色彩值以符合顯示器的色彩空間之外,您還需要處理顯示無法實際重現內容中所有色彩的情況:如果內容的色彩範圍大於顯示器, 則為 。 該程式稱為 gamut 對應。

Gamut 對應是遺失的,因為您必須權衡如何近似內容較大的範圍。 最直接的方法是色彩對稱,其中會保留顯示範圍內的色彩,而離開遊戲的色彩會裁剪到最接近的輸入範圍值。

在 ICC 配置檔型工作流程中,色彩管理連結庫中通常會自動處理 gamut 對應。 您可以藉由選取轉譯意圖來控制對應行為(請參閱 轉譯意圖模式)。

注意

當您處於進階色彩工作流程時,我們通常不建議針對來源或目的地使用感知轉譯意圖,因為它是針對 SDR 來源和目的地所設計,其色彩範圍比 HDR 和某些 WCG 顯示器所使用的色彩範圍更小;因此,使用它們可能會導致非預期的行為。

Windows 自動系統色彩管理

當 [進階色彩] 為作用中時,Windows 會執行自動系統色彩管理,以確保 App 的色彩內容會在顯示器上正確重現。 這可大幅簡化應用程式上所需的動作,雖然進階應用程式可能會繼續執行額外的處理,以達到最大色彩和感知精確度。 如需詳細資訊,請參閱 在高/標準動態範圍上使用 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)(其受限於顯示器的 gamut)。

執行 gamut 對應以限制顯示的遊戲域

GPU 的顯示管線會針對跨色色彩執行數值裁剪。 如果您的應用程式想要使用更複雜的對應,則必須自行執行。

具有進階色彩的 ICC 配置檔預設行為

自動系統色彩管理一定會影響現有 ICC 配置檔型應用程式的行為方式,因為它們會執行許多目前由作系統 (OS.) Windows 處理的動作本身,所以會將預設行為(如下所述)套用至 ICC 配置檔型應用程式。 這可確保這些應用程式的行為不正確。 不過,如果沒有進一步的工作,它們將無法存取任何擴充色彩功能。

特別是,根據預設,您的 ICC 配置檔型應用程式會限制為 sRGB gamut,即使監視器實際上範圍更廣。 Windows 也提供 ICC 相容性協助程式,可讓您的 ICC 應用程式存取顯示器的整個遊戲。 如需詳細資訊,請參閱本主題中的 顯示 ICC 配置檔相容性協助程式 一節。

取得顯示器的色彩特性

當 [進階色彩] 為作用中時,任何呼叫色彩配置檔管理 API 以取得顯示的預設配置檔都會傳回「無配置檔」,而不論實際安裝的配置文件為何。 依照慣例,「沒有配置檔」應該解譯為 sRGB。

顯示 ICC 配置檔仍然有效,且與進階色彩搭配使用,但它們只會在系統層級使用,而且大部分的應用程式不應該直接與它們互動。 只有在您的應用程式是列舉所有顯示配置檔的公用程式,或正在撰寫/安裝配置檔時,才需要下列資訊。

若要強制執行,Windows 會新增 STANDARDEXTENDED 色彩配置檔子類型的概念。 這適用於使用 COLORPROFILESUBTYPE的任何色彩設定檔管理 API:

CPST_STANDARD_DISPLAY_COLOR_MODE
CPST_EXTENDED_DISPLAY_COLOR_MODE

注意

STANDARDEXTENDED 子類型不是儲存在配置檔本身的屬性;相反地,它們會套用至配置檔的關聯至顯示器(也就是說,當配置檔新增至顯示器的配置檔關聯清單時)。 單一配置檔可以與顯示器的 STANDARDEXTENDED 子類型相關聯,這表示適用於標準和進階色彩案例。

顯示用於 SDR 的設定檔關聯,無論是一般 SDR 還是進階色彩 SDR,都有子類型 STANDARD (如果未指定任何值,則為預設值)。 顯示用於 HDR 模式的設定檔關聯是子型態 EXTENDED。 如果您的應用程式未指定子類型,則會將它解譯為 STANDARD

任何使用 COLORPROFILESUBTYPE 的 getter API,只會傳回具有相符 STANDARDEXTENDED 子類型的配置檔。 例如,如果 HDR 為使用中,則只有具有 EXTENDED 子類型的顯示配置檔才有效,而且不會使用 STANDARD 子類型配置檔。 Setter API 可以指定子類型(STANDARD 為預設值)。

執行色彩空間轉換成顯示器的色彩空間

由於 ICC 設定檔管理 API 會在使用進階色彩時傳回 sRGB,因此您的 ICC 配置檔型應用程式會將色彩管理設為 sRGB,而 Windows 會正確地將它重現為顯示器上的 sRGB。

執行 gamut 對應以限制顯示的遊戲域

會保留任何現有的 gamut-mapping 行為。

顯示 ICC 設定檔相容性協助程式

當 [進階色彩] 為作用中時,Windows 會提供相容性協助程式來顯示 ICC 配置檔,以提供顯示整個遊戲的存取權。 如此一來,您的應用程式會持續取得精確且寬廣的色彩,以達到顯示器的報告功能,這與目前在舊版非進階色彩模式中校正寬色監視器上可用的相同功能。 若沒有該協助程式,您的應用程式將受限於默認行為,也就是 sRGB(請參閱 ICC 配置檔預設行為與進階色彩)。

從 Windows 11 開始,即可取得該協助程式。 它不提供進階色彩的其他優點,包括存取更高的精確度/位深度或高動態範圍-您將需要修改應用程序成為進階色彩感知。

啟用顯示 ICC 相容性協助程式

顯示 ICC 相容性協助程式會根據每個應用程式啟用。 預設不會啟用。

使用者可以移至可執行檔屬性的 [相容性] 索引卷標,然後選取 [使用舊版顯示 ICC 色彩管理]來啟用應用程式。 相容性協助程式會套用至整個進程,而且只有在顯示器啟用進階色彩時才作用中,這不會影響標準 SDR 顯示器。

UI 來啟用可執行檔的 ICC 相容性協助程式

Windows 會自動為已知使用 ICC 色彩設定檔管理的一些熱門應用程式啟用協助程式。

沒有程式設計方式可為您的應用程式啟用該相容性協助程式。

取得顯示器的色彩特性

如果相容性協助程式為使用中,則當應用程式使用 STANDARD查詢預設 色彩配置檔時,Windows 會使用相同的數據來建構綜合 ICC 配置檔,以填入進階色彩顯示功能 API。 綜合配置文件的數據可能來自目前色彩配置檔的組合、顯示器的EDID或 DisplayID,或是來自其他來源。

如果您的應用程式會查詢預設 EXTENDED 色彩配置檔,則表示您的應用程式為進階色彩感知,且會收到實際的 EXTENDED 配置檔。

執行色彩空間轉換成顯示器的色彩空間

如果相容性協助程式作用中,則您的應用程式預期會使用 ICC 色彩管理,以綜合顯示配置檔為目標。 Windows 假設您的應用程式是以該色彩空間為目標,並且會執行正確的色彩空間轉換,以確保它在顯示器上正確呈現。

色彩空間轉換會套用至整個應用程式進程,因此,即使您的一些視覺效果內容不是受色彩管理,而且名義上是以 sRGB 為目標,所有應用程式的視覺內容都會被視為以顯示器的色彩空間為目標(例如 UI)。 不論圖形 API(GDI、DirectX、XAML 等等)、圖元格式或轉譯內容的其他特性為何,也會套用色彩空間轉換。

執行 gamut-mapping 以限制顯示器的 gamut

會保留任何現有的 gamut-mapping 行為。

用戶可見的行為變更

用戶可以檢查其 [兼容性屬性] 索引標籤,確認顯示 ICC 相容性協助程式是否為可執行檔使用中。如果您的 app 顯示預設顯示 ICC 設定檔的相關信息,則使用者會看到它是綜合配置檔。 配置檔的描述性內容(包括名稱)是實作詳細數據。

停用進階色彩時,實際色彩行為應該與相同。 在這兩種情況下,您的應用程式都會呈現精確的色彩,以存取顯示器的完整範圍,如 ICC 配置檔所述。