デスクトップ イメージのスケーリング
このトピックは、Windows 7 以降、および Windows Server 2008 R2 以降のバージョンの Windows オペレーティング システムにのみ適用されます。
スケーリングのしくみ
呼び出し元は、SetDisplayConfig ディスプレイの接続と構成 (CCD) 関数を使用して、デスクトップ イメージをモニターにスケーリングできます。
デスクトップとモニターで同じ解像度を使用する場合、デスクトップ イメージをモニターにスケーリングするために SetDisplayConfig は必要ありません。 この SetDisplayConfig 操作は、同一スケーリングと呼ばれます。
デスクトップとモニターの解像度が異なる場合、SetDisplayConfig は次のいずれかの種類のスケーリングを適用します。 モニターの解像度は、DISPLAYCONFIG_TARGET_MODE 構造体によって定義されます。
中央揃えスケーリング
中央揃えスケーリングは、スケーリングをまったく行わずにデスクトップをモニターに表示するモードです。 SetDisplayConfig で中央揃えスケーリングを適用すると、デスクトップの上下に黒いバンドが表示されることがあります。 次の図は、中央揃えスケーリングを示しています。
ストレッチ スケーリング
ストレッチ スケーリングは、ディスプレイ全体が使用されるように、デスクトップをモニター上で水平方向と垂直方向に引き伸ばして表示するモードです。 SetDisplayConfig でストレッチ スケーリングを適用すると、デスクトップの上下に黒いバンドは表示されません。 ただし、デスクトップが歪んで表示されることがあります。 次の図は、ストレッチ スケーリングを示しています。
縦横比を維持するストレッチ
縦横比を維持するストレッチ スケーリングは、縦横比を維持しながら、デスクトップを可能な限り水平方向と垂直方向に引き伸ばして表示するモードです。 SetDisplayConfig で縦横比を維持するストレッチ スケーリングを適用すると、デスクトップの上下または左右のいずれかに黒いバンドが表示されることがあります。 ただし、デスクトップの上下と左右の両方に黒いバンドが表示されることはありません。 ユーザーはこの種類のスケーリングを好むことが予想されるため、SetDisplayConfig ではこの種類のスケーリングを既定値として適用します。 次の図は、縦横比を維持するストレッチ スケーリングを示しています。
スケーリングは、パスに使用されるソース モードとターゲット モードによって異なります。 さらに、呼び出し元は、ターゲット モードの情報を指定しないで 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 アプリケーションから予想されるスケーリングを判断できます。