Share via


高度な色を使用した ICC プロファイルの動作

高度な色は、標準ディスプレイよりも大幅に高い色再現性を持つディスプレイの OS テクノロジの傘用語です。 詳細については、「 高/標準のダイナミック レンジ ディスプレイで DirectX を高度な色で使用する」を参照してください。 高度な色と自動色管理により、レガシとモダンの両方で、すべてのアプリの一貫性と比色精度の高い表示色が保証されます。 ただし、アプリでは、International Color Consortium (ICC) カラー プロファイルを使用して、独自の明示的なカラー管理を既に実行している可能性があります。

SDR または HDR ディスプレイで高度な色がアクティブになっている場合、ディスプレイ ICC プロファイルの動作は、下位互換性のない方法で変化します。 アプリがディスプレイ ICC プロファイルで動作する場合、Windows は互換性ヘルパーを提供して、アプリが引き続き正しい動作を得られるようにします。 高度な色対応アプリは、Windows がプロファイルを抽象化する代替アプリ向け API を提供するため、ディスプレイ ICC プロファイルとの直接対話から切り替える必要があります。詳細なガイダンスについては、「 高/標準のダイナミック レンジ ディスプレイで DirectX と高度な色を使用する」を参照してください。

このトピックでは、ICC プロファイルの動作の変更について説明します。 さらに、カラーマネージド アプリで表示 ICC プロファイルを引き続き使用する必要がある場合は、このトピックでは、高度な色の利点を段階的に活用するようにアプリを調整する方法について説明します。

従来の Windows の色管理の動作

高度な色が非アクティブな場合、Windows はアプリのビジュアル コンテンツ出力 (GDI hDC、DirectX スワップ チェーン、コンポジション ビジュアルなど) に対して色管理を実行しません。実際には、アプリのコンテンツが標準の sRGB 色空間にあることを前提としています。 アクティブディスプレイで正確な色再現が必要な場合は、アプリで独自のカラー管理を実行する必要があります。多くの場合、International Color Consortium (ICC) カラープロファイルを使用します。 メイン概念の手順は次のとおりです。

  1. ディスプレイの色特性を取得します。
  2. ディスプレイの色空間への色空間変換を実行します。
  3. ディスプレイの色域に制限するために、色域マッピングを実行します。

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 プロファイルベースのワークフローでは、色域マッピングは通常、カラー管理ライブラリで自動的に処理されます。 レンダリング意図を選択することで、マッピング動作を制御できます (「意図モードの レンダリング」を参照)。

Note

高度なカラー ワークフローを使用している場合、HDR や一部の WCG ディスプレイに使用される色域よりも色域が小さい SDR ソースと宛先用に設計されているため、一般に、ソースと宛先のどちらも知覚レンダリング意図を使用することはお勧めしません。そのため、これらを使用すると、予期しない動作が発生する可能性があります。

Windows の自動システムカラー管理

[高度な色] がアクティブな場合、Windows はシステムの自動色管理を実行します。これにより、アプリの色コンテンツがディスプレイ上で正確に再現されます。 これにより、アプリに必要なアクションが大幅に簡素化されますが、高度なアプリでは、色と知覚の精度を最大限に高めるために追加の処理が引き続き実行される可能性があります。 詳細については、「 高/標準のダイナミック レンジ ディスプレイで DirectX を高度な色で使用する」を参照してください。

ディスプレイの色特性を取得する

高度な色対応アプリは、表示 ICC プロファイルと直接やり取りしないでください。 代わりに、 DisplayInformation::GetAdvancedColorInfo または IDXGIOutput6 を使用して、ディスプレイのカラー プロパティを取得できます。

ディスプレイの色空間への色空間変換を実行する

Windows は、現在の既定のカラー プロファイルによって決定されるディスプレイの色空間への色空間変換を実行します。 プロファイルがない場合は、EDID 測色データが使用されます。 アプリは シーン参照の 色の動作を自動的に取得します。たとえば、 として RGB(1, 0, 0) エンコードされた sRGB 赤をレンダリングして Adobe RGB モニターに表示すると、Windows は sRGB 赤として正しく再現します。 高度な色対応アプリでは、 IDXGISwapChain3::SetColorSpace1 を使用して Windows に通知するために、適切な色空間でコンテンツにタグを付ける必要があります。 標準の整数ピクセル形式 (8 ビット RGBA など) にレンダリングされるすべての高度な色対応アプリの場合、Windows はアプリを sRGB として明示的に処理します。 高度な色のシナリオで AdobeRGB を赤でレンダリングする場合は、scRGB タグ付きサーフェスでレンダリング RGB(1.158157,0,0) する必要があります (ディスプレイの色域によって制限されます)。

色域マッピングを実行してディスプレイの色域に制限する

GPU の表示パイプラインは、色域外の色に対して数値クリッピングを実行します。 アプリでより高度なマッピングを使用する場合は、自分で行う必要があります。

高度な色を使用した ICC プロファイルの既定の動作

システムの自動色管理は、オペレーティング システム (OS)によって処理される多くのアクション自体を実行しているため、既存の ICC プロファイル ベースのアプリの動作方法に必ずしも影響します。これは、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

Note

STANDARD サブタイプと EXTENDED サブタイプは、プロファイル自体に格納されているプロパティではなく、プロファイルの関連付けに適用されます (つまり、プロファイルがディスプレイのプロファイル関連付けリストに追加されたとき)。 1 つのプロファイルをディスプレイの サブタイプとEXTENDEDサブタイプの両方STANDARDに関連付けることができるため、標準と高度な色の両方のシナリオで使用できます。

SDR で使用することを目的とした表示プロファイルの関連付け (通常の SDR または高度な色 SDR) にはサブタイプ STANDARD があります (値が指定されていない場合は既定値)。 HDR モードで使用するための表示プロファイルの関連付けはサブタイプ EXTENDEDです。 アプリでサブタイプが指定されていない場合、それは として STANDARD解釈されます。

COLORPROFILESUBTYPE を使用する getter API は、一致 STANDARD または EXTENDED サブタイプを持つプロファイルのみを返します。 たとえば、HDR がアクティブな場合、サブタイプを持つ EXTENDED 表示プロファイルのみが有効であり STANDARD 、サブタイプ プロファイルは使用されません。 セッター API ではサブタイプ (STANDARD が既定値) を指定できます。

ディスプレイの色空間への色空間変換を実行する

高度な色がアクティブな場合、ICC プロファイル管理 API は sRGB を返すので、ICC プロファイルベースのアプリは sRGB に色管理され、Windows はディスプレイ上の sRGB として正しく再現します。

色域マッピングを実行してディスプレイの色域に制限する

既存の色域マッピングの動作はすべて保持されます。

ICC プロファイル互換性ヘルパーの表示

高度な色がアクティブな場合、Windows には、ディスプレイ全体の色域へのアクセスを提供するディスプレイ ICC プロファイルの互換性ヘルパーが用意されています。 このように、アプリはディスプレイの報告された機能まで正確で広い色域の色を引き続き取得します。これは、現在の従来の非高度な色モードで調整された広色域モニターで使用できるのと同じ機能です。 そのヘルパーがないと、アプリは既定の動作 (sRGB) に制限されます ( 詳細な色の ICC プロファイルの既定の動作を参照)。

そのヘルパーは、Windows 11 以降で使用できます。 より高い精度/ビット深度または高ダイナミックレンジへのアクセスなど、Advanced Color の他の利点は提供されません。高度な色に対応するようにアプリを変更する必要があります。

ディスプレイ 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 プロファイルで説明されているように、アプリはディスプレイの全色域にアクセスできる正確な色をレンダリングします。