共用方式為


具有進階色彩的 ICC 設定檔行為

進階色彩是作業系統技術的一個涵蓋範圍,其色彩精確度明顯高於標準顯示器。 如需詳細資訊,請參閱 在高/標準動態範圍顯示器上使用 DirectX 搭配進階色彩。 進階色彩和自動色彩管理可確保所有應用程式的一致且色階正確顯示色彩:舊版和新式。 不過,您的應用程式可能已經使用國際色彩聯盟 () 色彩設定檔來執行自己的明確色彩管理。

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

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

舊版 Windows 色彩管理行為

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

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

以下是三個步驟的更多詳細資料。

取得顯示器的色彩特性

Win32 應用程式會使用 Windows 色彩系統設定檔管理功能 來取得預設的 ICC 設定檔,它會告訴您顯示器的色彩特性,包括其可用的色彩遊戲。

通用 Windows 平臺應用程式會改用DisplayInformation.GetColorProfileAsync 方法

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

如果顯示器的色彩空間不符合您內容的色彩空間,則必須進行色彩空間轉換。 例如,數位內容通常會編碼為 sRGB,但您的顯示器可能是廣域 DCI-P3。 您通常會使用可讀取 ICC 設定檔的 ICC 色彩管理程式庫,並轉換內容的色彩值以符合。 Windows 提供多個 ICC 色彩管理引擎;例如, Direct2D 色彩管理效果

請務必注意,以 ICC 設定檔為基礎的色彩管理是 顯示參考輸出參考。 這表示色彩值不會儲存為絕對 (場景參考 的色彩) 色彩,而是會相對於輸出裝置) (顯示色彩空間進行編碼。 例如,如果您的 app 正在轉譯 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 設定檔為基礎的工作流程中,遊戲對應通常會在色彩管理程式庫中自動處理。 您可以選取轉譯意圖來控制對應行為, (請參閱轉譯 意圖模式) 。

注意

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

Windows 自動系統色彩管理

當 [進階色彩] 處於作用中狀態時,Windows 會執行自動系統色彩管理,以確保應用程式的色彩內容會在顯示器上正確重現。 這可大幅簡化您應用程式上的必要動作,雖然進階應用程式可能會繼續執行額外的處理,以達到最大色彩和感知精確度。 如需詳細資訊,請參閱 在高/標準動態範圍顯示器上使用 DirectX 搭配進階色彩

取得顯示器的色彩特性

進階色彩感知應用程式不應該直接與顯示之 ICC 設定檔互動。 相反地,您可以使用 DisplayInformation::GetAdvancedColorInfoIDXGIOutput6取得顯示器的色彩屬性。

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

Windows 會執行色彩空間轉換至目前預設色彩設定檔所決定的顯示器色彩空間。 如果沒有設定檔,則會使用 EDID colorimetry 資料。 您的應用程式會自動取得 場景參考 的色彩行為,例如,如果您轉譯 sRGB 紅色編碼為 RGB(1, 0, 0) ,並顯示給 Adobe RGB 監視器,則 Windows 會將它正確地重現為 sRGB 紅色。 進階色彩感知應用程式應該使用正確的色彩空間標記其內容,以使用 IDXGISwapChain3::SetColorSpace1通知 Windows。 對於轉譯為標準整數像素格式的所有非進階色彩感知應用程式, (例如 8 位 RGBA) ,Windows 會明確地將應用程式視為 sRGB。 如果您想要在進階色彩案例中轉譯 AdobeRGB 紅色,則必須在 scRGB 標記的介面中轉 RGB(1.158157,0,0) 譯, (它受到顯示器遊戲) 的限制。

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

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

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

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

特別是,根據預設,您的 ICC 設定檔型應用程式會限制為 sRGB 遊戲,即使監視器實際上是更廣泛的遊戲。 Windows 也提供可讓其存取顯示器整個遊戲的 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 在未指定任何值時, (預設值為) 。 在 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 會提供相容性協助程式來顯示可存取顯示器的整個遊戲。 如此一來,您的應用程式就會繼續取得精確且寬色的色板色彩,最多顯示顯示的報告功能,這是目前在舊版非進階色彩模式中校正寬色板監視器上提供的相同功能。 若沒有協助程式,您的應用程式將會受限於預設行為,也就是 sRGB (使用 進階色彩) 查看 ICC 設定檔預設行為

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

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

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

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

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

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

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

取得顯示器的色彩特性

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

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

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

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

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

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

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

使用者可見的行為變更

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

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