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?

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top