Bagikan melalui


Menskalakan gambar desktop

Topik ini hanya berlaku untuk Windows 7 dan yang lebih baru, dan Windows Server 2008 R2 dan versi sistem operasi Windows yang lebih baru.

Cara kerja penskalaan

Pemanggil dapat menggunakan fungsi SetDisplayConfig Connecting and Configuring Displays (CCD) untuk menskalakan gambar desktop ke monitor:

  • Jika desktop dan monitor menggunakan resolusi yang sama, SetDisplayConfig tidak diperlukan untuk menskalakan gambar desktop ke monitor. Operasi SetDisplayConfig ini dikenal sebagai penskalakan identitas.

  • Jika resolusi desktop dan monitor berbeda, SetDisplayConfig menerapkan salah satu jenis penskalaan berikut. Resolusi monitor ditentukan oleh struktur DISPLAYCONFIG_TARGET_MODE .

    • Penskalan terpusat

      Penskalan terpusat adalah mode di mana desktop ditampilkan di monitor tanpa penskalakan sama sekali. Ketika SetDisplayConfig menerapkan penskalakan terpusat, pita hitam mungkin terlihat di atas dan di bawah desktop. Gambar berikut menunjukkan penskalakan berpusat.

      Diagram memperlihatkan penskalan terpusat dengan pita hitam di atas dan di bawah desktop.

    • Penskalan yang direntangkan

      Penskalan yang direntangkan adalah mode di mana desktop direntangkan secara horizontal dan vertikal pada monitor untuk memastikan bahwa seluruh tampilan digunakan. Saat SetDisplayConfig menerapkan penskalakan yang direntangkan, tidak ada pita hitam yang terlihat di atas dan di bawah desktop. Namun, desktop mungkin tampak terdistorsi. Gambar berikut menunjukkan penskalakan yang direntangkan.

      Diagram memperlihatkan penskalan yang direntangkan dengan desktop mengisi seluruh tampilan.

    • Pelestarian Rasio Aspek Direntangkan

      Peningkatan skala yang direntangkan aspek-rasio adalah mode di mana desktop direntangkan secara horizontal dan vertikal sebanyak mungkin sambil mempertahankan rasio aspek. Saat SetDisplayConfig menerapkan penskalaan yang direntangkan aspek-rasio, pita hitam mungkin terlihat di atas dan di bawah atau kiri dan kanan desktop. Namun, pita hitam tidak dapat dilihat baik di atas maupun di bawah dan kiri dan kanan desktop. Karena pengguna diharapkan lebih suka jenis penskalaan ini, SetDisplayConfig menerapkan jenis penskalaan ini sebagai default. Gambar berikut menunjukkan aspek-rasio-mempertahankan penskalan yang direntangkan.

      Diagram yang menunjukkan aspek-rasio-mempertahankan penskalan yang direntangkan dengan pita hitam di sisi atau di atas dan di bawah desktop.

Penskalaan tergantung pada mode sumber dan target yang digunakan untuk jalur. Selain itu, pemanggil dapat memanggil SetDisplayConfig tanpa menentukan informasi mode target (yaitu, mengatur parameter modeInfoArray bersifat opsional dan dapat diatur ke NULL). Ini berarti bahwa pemanggil biasanya tidak dapat memprediksi apakah SetDisplayConfig harus melakukan penskalakan apa pun. Selain itu, tidak ada API yang ada untuk mendapatkan daftar lengkap jenis penskalaan yang didukung adaptor grafis. Fungsi EnumDisplaySettings Win32 mengembalikan DMDFO_DEFAULT di anggota dmDisplayFixedOutput dari struktur DEVMODE yang ditunjuk parameter lpDevMode ketika pemanggil meminta jenis penskalaan Windows 7.

Penskalaan yang diteruskan pemanggil ke SetDisplayConfig adalah niat penskalaan daripada permintaan eksplisit untuk melakukan operasi penskalaan. Jika penskalaan diperlukan (misalnya, resolusi sumber dan target berbeda), SetDisplayConfig menggunakan penskalaan yang disediakan pemanggil. Jika penskalaian yang disediakan tidak didukung, SetDisplayConfig menggunakan penskalakan default adaptor grafis. Ketika resolusi sumber dan target yang diteruskan pemanggil ke SetDisplayConfig sama, SetDisplayConfig selalu mengatur penskalakan identitas.

Menskalakan permintaan

Tabel berikut menunjukkan permintaan penskalaan SetDisplayConfig yang berbeda, dan mengidentifikasi nomenklatur singkatan yang digunakan dalam tabel yang ditemukan di sub-bagian di bawah ini. Lihat DISPLAYCONFIG_SCALING untuk definisi nilai DISPLAYCONFIG_SCALING_XXX .

Permintaan penskalan Nomenklatur yang disingkat yang digunakan dalam tabel di bawah ini
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
Nilai penskala default adaptor. Saat ini, pada sistem tablet, defaultnya direntangkan. Pada sistem non-tablet dengan adaptor grafis yang mendukung Windows Display Driver Model (WDDM), default ditentukan oleh driver. Pada sistem non-tablet dengan adaptor grafis yang mendukung WDDM dengan fitur baru untuk Windows 7, defaultnya adalah DC_ASPECTRATIOCENTEREDMAX. AdapterDefault
Nilai penskalaan dari database untuk monitor yang tersambung saat ini DatabaseValue

Permintaan penskalakan SetDisplayConfig

Tabel berikut ini memperlihatkan nilai yang disimpan dalam database dan nilai yang benar-benar diatur, di mana:

  • "Set (sama)" dan "Store (sama)" adalah nilai set dan store ketika mode sumber yang dihasilkan dan mode target memiliki resolusi yang sama
  • "Set (berbeda)" dan "Store (berbeda)" adalah nilai set dan store ketika mode sumber yang dihasilkan dan mode target memiliki resolusi yang berbeda
Bendera penskalan diteruskan ke SetDisplayConfig Set (sama) Simpan (sama) Set (berbeda) Set (berbeda)
DC_IDENTITY konfigurasi saat ini tidak di Db DC_IDENTITY AdapterDefault AdapterDefault AdapterDefault
DC_IDENTITY konfigurasi saat ini di 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 pada WDDM dengan driver fitur Windows 7 DC_IDENTITY DC_ASPRATIOMAX DC_ASPRATIOMAX DC_ASPRATIOMAX
DC_ASPECTRATIOCENTEREDMAX pada driver WDDM DC_IDENTITY AdapterDefault AdapterDefault AdapterDefault
DC_CUSTOM pada WDDM dengan driver fitur Windows 7 yang memang mendukung penskalakan kustom di jalur DC_CUSTOM DC_CUSTOM DC_CUSTOM DC_CUSTOM
DC_CUSTOM pada WDDM dengan driver fitur Windows 7 yang tidak mendukung penskalakan kustom pada jalur DC_IDENTITY AdapterDefault AdapterDefault AdapterDefault
DC_CUSTOM pada driver WDDM DC_IDENTITY AdapterDefault AdapterDefault AdapterDefault
DC_PREFERRED konfigurasi saat ini tidak di Db DC_IDENTITY AdapterDefault AdapterDefault AdapterDefault
DC_PREFERRED konfigurasi saat ini di Db DC_IDENTITY DatabaseValue DatabaseValue DatabaseValue

Permintaan penskalan ChangeDisplaySettingsEx warisan

Tabel berikut menunjukkan bagaimana penskalaan yang dapat diteruskan pemanggil ke peta CHANGEDisplaySettingsEx API warisan ke set penskalaan, di mana:

  • "Set (sama)" dan "Store (sama)" adalah nilai set dan store ketika mode sumber yang dihasilkan dan mode target memiliki resolusi yang sama
  • "Set (berbeda)" dan "Store (berbeda)" adalah nilai set dan store ketika mode sumber yang dihasilkan dan mode target memiliki resolusi yang berbeda
Bendera penskalan diteruskan ke ChangeDisplaySettingsEx Set (sama) Simpan (sama) Set (berbeda) Set (berbeda)
DMDFO_DEFAULT dengan konfigurasi saat ini yang tidak ada dalam database CCD DC_IDENTITY AdapterDefault AdapterDefault AdapterDefault
DMDFO_DEFAULT dengan konfigurasi saat ini dalam database 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 tidak diatur, konfigurasi saat ini tidak ada di database CCD DC_IDENTITY AdapterDefault AdapterDefault AdapterDefault
DM_DISPLAYFIXEDOUTPUT tidak diatur, konfigurasi saat ini di database CCD DC_IDENTITY DatabaseValue DatabaseValue DatabaseValue

Terjemahan penskalaan Legacy EnumDisplaySettings

Tabel berikut menunjukkan bagaimana penskalaan konfigurasi tampilan diterjemahkan dan dikembalikan dari EnumDisplaySettings.

Penskalan aktif saat ini Nilai penskalaan GDI yang dikembalikan dari EnumDisplaySettings(ENUM_CURRENT_SETTINGS) warisan
DC_IDENTITY DMDFO_DEFAULT
DC_CENTERED DMDFO_CENTER
DC_STRETCHED DMDFO_STRETCH
DC_ASPRATIOMAX DMDFO_DEFAULT
DC_CUSTOM DMDFO_DEFAULT
DC_PREFERRED DMDFO_DEFAULT

Permainan dan penskalakan DirectX

Microsoft DirectX 9L dan runtime yang lebih lama mengharuskan aplikasi selalu memanggil fungsi ChangeDisplaySettingsEx tanpa DM_DISPLAYFIXEDOUTPUT diatur dalam anggota dmFields dari struktur DEVMODE yang dituju parameter lpDevMode . Runtime DirectX 10 dan yang lebih baru memungkinkan aplikasi untuk memilih penskalakan yang diteruskan aplikasi tersebut ke ChangeDisplaySettingsEx. Tabel berikut ini memperlihatkan pemetaan nilai penskalaan ke bendera penskalaan yang diteruskan ke ChangeDisplaySettingsEx.

Nilai penskala rantai balik DXGI Menskalakan bendera yang diteruskan ke ChangeDisplaySettingsEx
DXGI_MODE_SCALING_UNSPECIFIED DMDFO_DEFAULT, DMDFO_CENTER, atau DMDFO_STRETCH. Penskalakan yang digunakan aplikasi tergantung pada beberapa faktor, yang mencakup penskalan desktop saat ini dan daftar mode yang diekspos driver.
DXGI_MODE_SCALING_CENTERED DMDFO_CENTER
DXGI_MODE_SCALING_STRETCHED DMDFO_STRETCH

Dengan menggunakan informasi ini dalam kombinasi dengan tabel penskalaan sebelumnya, Anda dapat menentukan penskalaan yang diharapkan dari aplikasi DirectX.