デスクトップ イメージのスケーリング

このトピックは、Windows 7 以降、および Windows Server 2008 R2 以降のバージョンの Windows オペレーティング システムにのみ適用されます。

スケーリングのしくみ

呼び出し元は、SetDisplayConfig ディスプレイの接続と構成 (CCD) 関数を使用して、デスクトップ イメージをモニターにスケーリングできます。

  • デスクトップとモニターで同じ解像度を使用する場合、デスクトップ イメージをモニターにスケーリングするために SetDisplayConfig は必要ありません。 この SetDisplayConfig 操作は、同一スケーリングと呼ばれます。

  • デスクトップとモニターの解像度が異なる場合、SetDisplayConfig は次のいずれかの種類のスケーリングを適用します。 モニターの解像度は、DISPLAYCONFIG_TARGET_MODE 構造体によって定義されます。

    • 中央揃えスケーリング

      中央揃えスケーリングは、スケーリングをまったく行わずにデスクトップをモニターに表示するモードです。 SetDisplayConfig で中央揃えスケーリングを適用すると、デスクトップの上下に黒いバンドが表示されることがあります。 次の図は、中央揃えスケーリングを示しています。

      Diagram showing centered scaling with black bands above and below the desktop.

    • ストレッチ スケーリング

      ストレッチ スケーリングは、ディスプレイ全体が使用されるように、デスクトップをモニター上で水平方向と垂直方向に引き伸ばして表示するモードです。 SetDisplayConfig でストレッチ スケーリングを適用すると、デスクトップの上下に黒いバンドは表示されません。 ただし、デスクトップが歪んで表示されることがあります。 次の図は、ストレッチ スケーリングを示しています。

      Diagram showing stretched scaling with the desktop filling the entire display.

    • 縦横比を維持するストレッチ

      縦横比を維持するストレッチ スケーリングは、縦横比を維持しながら、デスクトップを可能な限り水平方向と垂直方向に引き伸ばして表示するモードです。 SetDisplayConfig で縦横比を維持するストレッチ スケーリングを適用すると、デスクトップの上下または左右のいずれかに黒いバンドが表示されることがあります。 ただし、デスクトップの上下左右の両方に黒いバンドが表示されることはありません。 ユーザーはこの種類のスケーリングを好むことが予想されるため、SetDisplayConfig ではこの種類のスケーリングを既定値として適用します。 次の図は、縦横比を維持するストレッチ スケーリングを示しています。

      Diagram showing aspect-ratio-preserving stretched scaling with black bands on either side or above and below the desktop.

スケーリングは、パスに使用されるソース モードとターゲット モードによって異なります。 さらに、呼び出し元は、ターゲット モードの情報を指定しないで SetDisplayConfig を呼び出すことができます (つまり、modeInfoArray パラメーターの設定は省略可能であり、NULL に設定できます)。 つまり、呼び出し元は通常、SetDisplayConfig がスケーリングを実行する必要があるかどうかを予測できません。 さらに、グラフィックス アダプターがサポートしているスケーリングの種類の完全なリストを取得する API は存在しません。 EnumDisplaySettings Win32 関数は、呼び出し元が Windows 7 のスケーリングの種類を要求したときに lpDevMode パラメーターが指す DEVMODE 構造体の dmDisplayFixedOutput メンバーの DMDFO_DEFAULT を返します。

呼び出し元が SetDisplayConfig に渡すスケーリングは、スケーリング操作を実行するための明示的な要求ではなく、スケーリングの意図です。 スケーリングが必要な場合 (ソースとターゲットの解像度が異なる場合など)、SetDisplayConfig は呼び出し元が指定するスケーリングを使用します。 指定されたスケーリングがサポートされていない場合、SetDisplayConfig はグラフィックス アダプターの既定のスケーリングを使用します。 呼び出し元が SetDisplayConfig に渡すソースとターゲットの解像度が同じ場合、SetDisplayConfig は常に同一スケーリングを設定します。

スケール要求

次の表は、さまざまな SetDisplayConfig スケーリング要求を示し、以下のサブセクションの表で使用される省略形の命名法を示しています。 DISPLAYCONFIG_SCALING_XXX 値の定義については、「DISPLAYCONFIG_SCALING」を参照してください。

スケーリング要求 以下の表で使用される省略形の命名法
DISPLAYCONFIG_SCALING_IDENTITY DC_IDENTITY
DISPLAYCONFIG_SCALING_CENTERED DC_CENTERED
DISPLAYCONFIG_SCALING_STRETCHED DC_STRETCHED
DISPLAYCONFIG_SCALING_ASPECTRATIOCENTEREDMAX DC_ASPECTRATIOCENTEREDMAX
DISPLAYCONFIG_SCALING_CUSTOM DC_CUSTOM
DISPLAYCONFIG_SCALING_PREFERRED DC_PREFERRED
アダプターの既定のスケーリング値。 現在、タブレット システムでは、既定値はストレッチです。 Windows Display Driver Model (WDDM) 対応のグラフィックス アダプターを搭載した非タブレット システムでは、既定値はドライバーによって定義されます。 Windows 7 の新機能を備えた WDDM 対応のグラフィックス アダプターを搭載した非タブレット システムでは、既定値は DC_ASPECTRATIOCENTEREDMAX です。 AdapterDefault
現在接続されているモニターのデータベースからのスケーリング値 DatabaseValue

SetDisplayConfig スケーリング要求

次の表は、データベースに保存されている値と、実際に設定されている値を示しています。ここで、

  • "設定 (同じ)" と "保存 (同じ)" は、結果として得られたソース モードとターゲット モードの解像度が同じ場合の設定値と保存値です
  • "設定 (異なる)" と "保存 (異なる)" は、結果として得られたソース モードとターゲット モードの解像度が異なる場合の設定値と保存値です
SetDisplayConfig に渡されるスケーリング フラグ 設定 (同じ) 保存 (同じ) 設定 (異なる) 設定 (異なる)
DC_IDENTITY (現在の構成が Db にない場合) DC_IDENTITY AdapterDefault AdapterDefault AdapterDefault
DC_IDENTITY (現在の構成が Db にある場合) DC_IDENTITY DatabaseValue DatabaseValue DatabaseValue
DC_CENTERED DC_IDENTITY DC_CENTERED DC_CENTERED DC_CENTERED
DC_STRETCHED DC_IDENTITY DC_STRETCHED DC_STRETCHED DC_STRETCHED
DC_ASPECTRATIOCENTEREDMAX (Windows 7 の機能ドライバーを使用した WDDM の場合) DC_IDENTITY DC_ASPRATIOMAX DC_ASPRATIOMAX DC_ASPRATIOMAX
DC_ASPECTRATIOCENTEREDMAX (WDDM ドライバーの場合) DC_IDENTITY AdapterDefault AdapterDefault AdapterDefault
DC_CUSTOM (パスでのカスタム スケーリングをサポートしている Windows 7 の機能ドライバーを使用した WDDM の場合) DC_CUSTOM DC_CUSTOM DC_CUSTOM DC_CUSTOM
DC_CUSTOM (パスでのカスタム スケーリングをサポートしていない Windows 7 の機能ドライバーを使用した WDDM の場合) DC_IDENTITY AdapterDefault AdapterDefault AdapterDefault
DC_CUSTOM (WDDM ドライバーの場合) DC_IDENTITY AdapterDefault AdapterDefault AdapterDefault
DC_PREFERRED (現在の構成が Db にない場合) DC_IDENTITY AdapterDefault AdapterDefault AdapterDefault
DC_PREFERRED (現在の構成が Db にある場合) DC_IDENTITY DatabaseValue DatabaseValue DatabaseValue

レガシ ChangeDisplaySettingsEx のスケーリング要求

次の表は、呼び出し元がレガシ ChangeDisplaySettingsEx API に渡すことができるスケーリングをスケーリング セットにマップする方法を示しています。ここで、

  • "設定 (同じ)" と "保存 (同じ)" は、結果として得られたソース モードとターゲット モードの解像度が同じ場合の設定値と保存値です
  • "設定 (異なる)" と "保存 (異なる)" は、結果として得られたソース モードとターゲット モードの解像度が異なる場合の設定値と保存値です
ChangeDisplaySettingsEx に渡されるスケーリング フラグ 設定 (同じ) 保存 (同じ) 設定 (異なる) 設定 (異なる)
DMDFO_DEFAULT (現在の構成が CCD データベースにない場合) DC_IDENTITY AdapterDefault AdapterDefault AdapterDefault
DMDFO_DEFAULT (現在の構成が CCD データベースにある場合) DC_IDENTITY DatabaseValue DatabaseValue DatabaseValue
DMDFO_STRETCH DC_IDENTITY DC_STRETCHED DC_STRETCHED DC_STRETCHED
DMDFO_CENTER DC_IDENTITY DC_CENTERED DC_CENTERED DC_CENTERED
DM_DISPLAYFIXEDOUTPUT が設定されてない場合 (現在の構成が CCD データベースにない場合) DC_IDENTITY AdapterDefault AdapterDefault AdapterDefault
DM_DISPLAYFIXEDOUTPUT が設定されてない場合 (現在の構成が CCD データベースにある場合) DC_IDENTITY DatabaseValue DatabaseValue DatabaseValue

レガシ EnumDisplaySettings のスケーリング変換

次の表は、ディスプレイ構成のスケーリングがどのように変換され、EnumDisplaySettings からどのように返されるのかを示しています。

現在アクティブなスケーリング レガシ EnumDisplaySettings(ENUM_CURRENT_SETTINGS) から返される GDI スケーリング値
DC_IDENTITY DMDFO_DEFAULT
DC_CENTERED DMDFO_CENTER
DC_STRETCHED DMDFO_STRETCH
DC_ASPRATIOMAX DMDFO_DEFAULT
DC_CUSTOM DMDFO_DEFAULT
DC_PREFERRED DMDFO_DEFAULT

DirectX ゲームとスケーリング

Microsoft DirectX 9L 以前のランタイムでは、アプリケーションが、lpDevMode パラメーターが指す DEVMODE 構造体の dmFields メンバーに DM_DISPLAYFIXEDOUTPUT を設定しないで、ChangeDisplaySettingsEx 関数を呼び出す必要があります。 DirectX 10 以降のランタイムを使用すると、アプリケーションは、これらのアプリケーションが ChangeDisplaySettingsEx に渡すスケーリングを選択することができます。 次の表は、ChangeDisplaySettingsEx に渡されるスケーリング フラグへのスケーリング値のマッピングを示しています。

DXGI フリップ チェーンのスケーリング値 ChangeDisplaySettingsEx に渡されるスケーリング フラグ
DXGI_MODE_SCALING_UNSPECIFIED DMDFO_DEFAULT、DMDFO_CENTER、または DMDFO_STRETCH。 アプリケーションで使用されるスケーリングは、現在のデスクトップ スケーリングやドライバーが公開するモードのリストなど、いくつかの要因によって異なります。
DXGI_MODE_SCALING_CENTERED DMDFO_CENTER
DXGI_MODE_SCALING_STRETCHED DMDFO_STRETCH

この情報を上記のスケーリング表と組み合わせて使用することで、DirectX アプリケーションから予想されるスケーリングを判断できます。