Saya perlu mengonversi Piksel ke Poin di C #. Saya telah melihat beberapa penjelasan rumit tentang topik tersebut, tetapi sepertinya tidak dapat menemukan formula sederhana. Mari kita asumsikan 96dpi standar, bagaimana cara menghitung konversi ini?
Saya perlu mengonversi Piksel ke Poin di C #. Saya telah melihat beberapa penjelasan rumit tentang topik tersebut, tetapi sepertinya tidak dapat menemukan formula sederhana. Mari kita asumsikan 96dpi standar, bagaimana cara menghitung konversi ini?
Jawaban:
Ada 72 poin per inci ; jika cukup untuk mengasumsikan 96 piksel per inci, rumusnya agak sederhana:
poin = piksel * 72/96
Ada cara untuk mendapatkan piksel yang dikonfigurasi per inci dari tampilan Anda di Windows menggunakan GetDeviceCaps
. Microsoft memiliki panduan yang disebut "Mengembangkan Aplikasi DPI-Sadar" , lihat bagian "Membuat DPI-Sadar Font".
W3C telah mendefinisikan pengukuran piksel px
sebagai tepat 1/96 dari 1in terlepas dari resolusi aktual layar Anda, sehingga rumus di atas harus baik untuk semua pekerjaan web.
Dengan asumsi 96dpi adalah kesalahan besar . Sekalipun asumsi itu benar, ada juga opsi untuk menskala font. Jadi font yang ditetapkan untuk 10pts sebenarnya dapat ditampilkan seolah-olah 12.5pt (125%).
Dimulai dengan yang diberikan:
Jika Anda ingin menemukan poin (pt) berdasarkan piksel (px):
72 pt x pt
------ = ----- (1) for 150dpi system
150 px y px
Mengatur ulang:
x = (y/150) * 72 (2) for 150dpi system
begitu:
points = (pixels / 150) * 72 (3) for 150dpi system
WPF mengonversi titik ke piksel dengan System.Windows.FontSizeConverter. FontSizeConverter menggunakan System.Windows.LengthConverter. LengthConverter menggunakan faktor 1.333333333333333333 untuk mengkonversi dari titik (p) ke piksel (x): x = p * 1.3333333333333333
System.Drawing.Graphics memiliki properti DpiX dan DpiY. DpiX adalah piksel per inci secara horizontal. DpiY adalah piksel per inci secara vertikal. Gunakan itu untuk mengkonversi dari titik (72 poin per inci) ke piksel.
Mis: 14 titik horizontal = (14 * DpiX) / 72 piksel
Tentunya seluruh pertanyaan ini seharusnya:
"Bagaimana cara mendapatkan PPI horizontal dan vertikal (Piksel Per Inci) dari monitor?"
Ada 72 titik dalam satu inci (menurut definisi, "titik" didefinisikan sebagai 1/72 inci, demikian pula "pica" didefinisikan sebagai 1/72 kaki). Dengan dua bit informasi ini Anda dapat mengkonversi dari px ke pt dan kembali dengan sangat mudah.
poin = (piksel / 96) * 72 pada mesin XP / Vista / 7 standar (default pabrik)
poin = (piksel / 72) * 72 pada Mac standar yang menjalankan OSX (Default pabrik)
Windows berjalan sebagai default di 96dpi (display) Mac berjalan sebagai default di 72 dpi (display)
72 Poin POSTSCRIPT = 1 inci 12 Poin POSTSCRIPT = 1 POSTSCRIPT Pica 6 POSTSCRIPT Picas = 72 Poin = 1 inci
1 poin = 1⁄72 inci = 25,4⁄72 mm = 0,3527 mm
DPI = Dots Per Inch PPI = Pixels Per Inch LPI = Lines per inch
Info lebih lanjut jika menggunakan mereka sebagai pengukur
16px = 1em (default untuk teks normal) 8em = 16px * 8 Pixels / 16 = em
Ini bekerja:
int pixels = (int)((dp) * Resources.System.DisplayMetrics.Density + 0.5f);
Menggunakan wxPython di Mac untuk mendapatkan DPI yang benar sebagai berikut:
from wx import ScreenDC
from wx import Size
size: Size = ScreenDC().GetPPI()
print(f'x-DPI: {size.GetWidth()} y-DPI: {size.GetHeight()}')
Ini menghasilkan:
x-DPI: 72 y-DPI: 72
Jadi, rumusnya adalah:
poin: int = (pixelNumber * 72) // 72
Garis tinggi dikonversi menjadi titik dan piksel (rumus saya sendiri). Berikut ini adalah contoh dengan entri manual 213,67 poin di bidang Tinggi Baris:
213.67 Manual Entry
0.45 Add 0.45
214.12 Subtotal
213.75 Round to a multiple of 0.75
213.00 Subtract 0.75 provides manual entry converted by Excel
284.00 Divide by 0.75 gives the number of pixels of height
Di sini entri manual 213,67 poin memberikan 284 piksel.
Di sini entri manual 213,68 poin memberikan 285 piksel.
(Mengapa 0,45? Saya tidak tahu tetapi itu berhasil.)