Konversikan Piksel ke Poin


125

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:


198

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 pxsebagai tepat 1/96 dari 1in terlepas dari resolusi aktual layar Anda, sehingga rumus di atas harus baik untuk semua pekerjaan web.


26
72 Poin Per inci BUKAN item yang bisa diperdebatkan, itu sama di seluruh papan!
Penjual Mitchel

11
@ David dpi tergantung pada tampilan, ppi adalah konstanta tipografi
Corey Ross

3
@Buat artikel itu hanya menjelaskan mengapa monitor memiliki variabel DPI. PPI masih sama. Jumlah kilometer dalam satu mil tidak berubah tergantung pada mobil yang Anda kendarai. Dengan asumsi 96dpi umumnya bukan ide yang baik, tetapi jika kita melakukannya maka formula yang diberikan adalah benar.
Quentin

13
Biasanya PPI adalah singkatan untuk piksel per inci, bukan poin per inci. Mungkin dari sanalah kebingungan itu berasal? Poin per inci selalu 72; terima kasih atas tautan Xetius.
Mark Ransom

@Corey Ross: Sebenarnya, DPI akan tergantung pada printer, sementara PPI tergantung pada monitor. Tapi semua orang salah memanggil PPI DPI ...
Stefan Steiger

58

Coba ini jika kode Anda terletak pada formulir:

Graphics g = this.CreateGraphics();
points = pixels * 72 / g.DpiX;
g.Dispose();

2
Apakah pantas menunjukkan bahwa DpiX adalah untuk Lebar di mana DpiY harus digunakan untuk ketinggian?
PandaWood

25

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%).


23

Dimulai dengan yang diberikan:

  • Ada 72 poin dalam satu inci (itulah intinya, 1/72 inci)
  • pada sistem yang diatur untuk 150dpi, ada 150 piksel per inci.
  • 1 in = 72pt = 150px (untuk pengaturan 150dpi)

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

1
dpi dalam persamaan pertama harus px - untuk membatalkan istilah, karena kami memiliki asumsi (1) untuk sistem 150dpi
Jason S

9

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


Tolong jelaskan juga mengapa nilai ini digunakan ... Secara kebetulan, ini adalah 96 dpi (DPI default windows untuk tampilan) / 72 dpi (DPI yang titiknya didefinisikan pada).
Memiliki QUIT - Anony-Mousse

5

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


4

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.


Untuk membuatnya lebih rumit, saya sedang berurusan dengan menyelaraskan hal-hal pada laporan Layanan Pelaporan (RDL) yang sedang dikonversi menjadi PDF. Pada akhirnya, siapa yang tahu apa DPI itu? Saya menggunakan tebakan terbaik saya. :)
Todd Davis

Maksud Anda, "Bagaimana cara mendapatkan DPI monitor horizontal dan vertikal?" PPI adalah konstanta dari 72. Selalu dan akan selalu.
Xetius

1
Piksel Per Inci, bukan Poin Per Inci (Pica).
JeeBee

1
Um, oops, bukan Pica! Itu 1/6 inci. Poin Per Inch adalah mubazir, istilahnya adalah "Poin". "Point" adalah 1/72 inci.
JeeBee

4

Sebenarnya harus begitu

points = pixels * 96 / 72

1
Ini salah jika Anda menganggap 96dpi, dan 72ppi (poin per inci). Ini akan menjadi poin = piksel * 72/96
Jason S

4

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


1

Ini bekerja:

int pixels = (int)((dp) * Resources.System.DisplayMetrics.Density + 0.5f);

0

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


-1

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.)

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.