Bagikan melalui


Direct2D dan High-DPI

Menulis aplikasi yang sadar DPI adalah kunci untuk membuat antarmuka pengguna (UI) terlihat baik secara konsisten di berbagai pengaturan tampilan DPI tinggi. Aplikasi yang tidak sadar DPI tetapi berjalan pada pengaturan tampilan DPI tinggi dapat menderita banyak artefak visual, termasuk penskalaan elemen UI yang salah, teks terpotong, dan gambar buram. Dengan menambahkan dukungan dalam aplikasi Anda untuk kesadaran DPI, Anda membuat presentasi UI aplikasi Anda lebih dapat diprediksi, membuatnya lebih menarik secara visual dan lebih mudah dibaca untuk pengguna. Untungnya, Direct2D memudahkan penulisan aplikasi yang bekerja dengan baik di DPI tinggi. Topik ini berisi bagian berikut.

Dukungan DPI Tinggi di Direct2D

Direct2D menyediakan fitur berikut untuk bekerja dengan skenario DPI tinggi:

  • Ini secara otomatis menghormati DPI sistem saat membuat target render berjendela, selama manifes aplikasi menunjukkan bahwa aplikasi menangani DPI dengan benar. (Untuk informasi tentang cara menyatakan bahwa aplikasi Anda sadar DPI, lihat Cara Memastikan Aplikasi Anda Ditampilkan Dengan Benar pada Tampilan DPI Tinggi.)
  • Ini mengekspresikan koordinat dalam DIP (Piksel Independen Perangkat), yang memungkinkan aplikasi untuk menskalakan secara otomatis ketika pengaturan DPI berubah.
  • Ini memungkinkan bitmap untuk memiliki DPI dan menskalakannya dengan benar dengan mempertimbangkan DPI. Fitur ini juga dapat digunakan untuk mempertahankan ikon pada resolusi yang berbeda.
  • Ini mengekspresikan sebagian besar sumber daya dalam DIP, yang membuat sumber daya secara otomatis independen dari resolusi.
  • Ini menggunakan ruang koordinat floating-point dan antialias, sehingga konten apa pun dapat diskalakan ke DPI arbitrer apa pun.

Alur grafis Direct2D dirancang untuk menskalakan dari 96 DPI ke 1200DPI.

Windows 8 dan DPI Tinggi

Dimulai dengan Windows 8, ada fitur tambahan untuk dukungan DPI tinggi.

Jika DPI konteks perangkat cukup tinggi, Direct2D mengubah ambang yang digunakannya untuk mengaktifkan antialisis teks vertikal. Ini menghasilkan penyajian teks yang lebih cepat pada tampilan DPI tinggi. Selain itu, Anda dapat mengalihkan mode unit ke piksel alih-alih DIP menggunakan metode ID2D1DeviceContext::SetUnitMode . Jika Anda mengatur mode unit ke piksel dan DPI konteks perangkat ke DPI layar, pengoptimalan masih diaktifkan.

Apa itu DIP?

Piksel independen perangkat (DIP) adalah piksel logis yang memetakan ke piksel perangkat fisik melalui skalar, DPI. DPI adalah singkatan dari titik per inci, di mana titik mewakili piksel perangkat fisik. (Nomenklatur berasal dari pencetakan, di mana titik-titik adalah titik tinta terkecil yang dapat dihasilkan oleh proses pencetakan). Karena monitor standar digunakan untuk memiliki 96 titik per inci, DPI 96 berarti bahwa piksel independen perangkat (atau DIP) dipetakan 1:1 dengan piksel fisik. Misalnya, jika DPI adalah 96*2 = 192, maka satu DIP akan mencakup dua piksel fisik.

Ada banyak alasan mengapa aplikasi tidak selalu menangani penskalaan ini dengan benar; salah satu alasan paling sederhana adalah membutuhkan pekerjaan ekstra untuk menemukan dan menggunakan nilai skalar ini saat merender. Di Direct2D, penskalan diterapkan secara default. Karena pemetaan ini, piksel perangkat fisik mungkin berakhir pada koordinat DIP pecahan, yang merupakan salah satu alasan mengapa Direct2D menggunakan ruang koordinat floating-point.

piksel fisik = (dip × DPI) / 96

Untuk mengonversi piksel fisik menjadi DIP, gunakan rumus ini:

dip = (piksel fisik × 96) / DPI

Catatan

Dimulai dengan Windows 8, Anda dapat mengalihkan mode unit ke piksel alih-alih DIP menggunakan metode ID2D1DeviceContext::SetUnitMode.

 

Cara Memastikan Bahwa Aplikasi Anda Ditampilkan Dengan Benar pada Tampilan DPI Tinggi