Domanda
Ho bisogno di convertire i pixel in punti in C #. Ho visto alcune spiegazioni complicate sull'argomento, ma non riesco a individuare una formula semplice. Supponiamo che un 96 dpi standard, come posso calcolare questa conversione?
Soluzione
Ci sono 72 punti per pollice ; se è sufficiente assumere 96 pixel per pollice, la formula è piuttosto semplice:
punti = pixel * 72/96
Esiste un modo per ottenere i pixel configurati per pollice del display in Windows utilizzando GetDeviceCaps
. Microsoft ha una guida chiamata " Sviluppo di applicazioni DPI-compatibili " , guarda per la sezione " Creazione di caratteri DPI-consapevoli " ;.
Il W3C ha definito la misurazione dei pixel px
esattamente come 1 / 96th of 1in indipendentemente dalla risoluzione effettiva del display, quindi la formula sopra dovrebbe essere valida per tutto il lavoro sul web.
Altri suggerimenti
Prova questo se il tuo codice si trova in una forma:
Graphics g = this.CreateGraphics();
points = pixels * 72 / g.DpiX;
g.Dispose();
Supponendo che 96 dpi sia un errore enorme . Anche se il presupposto è giusto, c'è anche un'opzione per ridimensionare i caratteri. Quindi un set di caratteri per 10 punti potrebbe effettivamente essere mostrato come se fosse 12,5 pt (125%).
A partire dal dato:
- Ci sono 72 punti in un pollice (ovvero un punto, 1/72 di pollice)
- su un sistema impostato per 150 dpi, ci sono 150 pixel per pollice.
- 1 in = 72pt = 150px (per impostazione 150 dpi)
Se vuoi trovare punti (pt) basati su pixel (px):
72 pt x pt
------ = ----- (1) for 150dpi system
150 px y px
Riorganizzare:
x = (y/150) * 72 (2) for 150dpi system
così:
points = (pixels / 150) * 72 (3) for 150dpi system
WPF converte i punti in pixel con System.Windows.FontSizeConverter. FontSizeConverter utilizza System.Windows.LengthConverter. Il LengthConverter utilizza il fattore 1.33333333333333333333 per convertire da punti (p) a pixel (x): x = p * 1.3333333333333333
System.Drawing.Graphics ha proprietà DpiX e DpiY. DpiX è pixel per pollice in orizzontale. DpiY è pixel per pollice in verticale. Usa quelli per convertire da punti (72 punti per pollice) in pixel.
Esempio: 14 punti orizzontali = (14 * DpiX) / 72 pixel
Sicuramente l'intera domanda dovrebbe essere:
" Come posso ottenere il PPI (Pixel per pollice) orizzontale e verticale del monitor? "
Ci sono 72 punti in un pollice (per definizione, un "punto" è definito come 1/72 di pollice, allo stesso modo una "pica" è definita come 1/72 di piede). Con questi due bit di informazioni puoi convertire da px in pt e viceversa molto facilmente.
In realtà deve essere
points = pixels * 96 / 72
points = (pixel / 96) * 72 su una macchina XP / Vista / 7 standard (impostazioni di fabbrica)
points = (pixels / 72) * 72 su un Mac standard con OSX (impostazioni di fabbrica)
Windows funziona come predefinito a 96 dpi (display) I Mac funzionano come predefiniti a 72 dpi (display)
72 punti POSTSCRIPT = 1 pollice 12 punti POSTSCRIPT = 1 pica POSTSCRIPT 6 POSTSCRIPT Picas = 72 punti = 1 pollice
1 punto = 1 & # 8260; 72 pollici = 25,4 & # 8260; 72 mm = 0,3527 mm
DPI = Punti per pollice PPI = Pixel per pollice LPI = Linee per pollice
Ulteriori informazioni se si utilizza em come misura
16px = 1em (impostazione predefinita per il testo normale) 8em = 16px * 8 Pixel / 16 = em
Funziona:
int pixels = (int)((dp) * Resources.System.DisplayMetrics.Density + 0.5f);
Linee di altezza convertite in punti e pixel (la mia formula). Ecco un esempio con l'immissione manuale di 213,67 punti nel campo Altezza riga:
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
Qui l'immissione manuale di 213,67 punti produce 284 pixel.
Qui l'inserimento manuale di 213,68 punti dà 285 pixel.
(Perché 0.45? Non lo so ma funziona.)