Convertir des Pixels en Points
j'ai besoin de convertir les Pixels en Points en C#. J'ai vu des explications compliquées sur le sujet, mais je n'arrive pas à trouver une formule simple. Supposons un 96dpi standard, Comment puis-je calculer cette conversion?
11 réponses
il y a 72 points par pouce ; s'il est suffisant de supposer 96 pixels par pouce, La formule est assez simple:
points = pixels * 72 / 96
il y a un moyen d'obtenir les pixels configurés par pouce de votre écran dans Windows en utilisant GetDeviceCaps
. Microsoft a un guide intitulé "développer des Applications compatibles avec les DPI" , cherchez la section "Créer des Applications compatibles avec les DPI" Police."
le W3C a défini la mesure de pixel px
comme exactement 1/96ème de 1in quelle que soit la résolution réelle de votre écran, de sorte que la formule ci-dessus devrait être bon pour tous les travaux sur le web.
essayez ceci si votre code se trouve dans une forme:
Graphics g = this.CreateGraphics();
points = pixels * 72 / g.DpiX;
g.Dispose();
en supposant que 96dpi est une énorme erreur. Même si l'hypothèse est juste, il y a aussi une option d'échelle des polices. Ainsi, une police définie pour 10pts peut être affichée comme si elle était de 12.5 pt (125%).
commençant par le donné:
- il y a 72 points dans un pouce (c'est ce qu'est un point, 1/72 d'un pouce)
- sur un système réglé à 150 dpi, il y a 150 pixels par pouce.
- 1 in = 72pt = 150px (pour le réglage de 150dpi)
si vous voulez trouver des points (pt) basés sur les pixels (px):
72 pt x pt
------ = ----- (1) for 150dpi system
150 px y px
réarrangement:
x = (y/150) * 72 (2) for 150dpi system
so:
points = (pixels / 150) * 72 (3) for 150dpi system
WPF convertit les points en pixels avec le système.Windows.FontSizeConverter. Le FontSizeConverter utilise le système.Windows.LengthConverter. La directive LengthConverter utilise le facteur 1.3333333333333333 pour convertir les points (p) en pixels (x): x = p * 1.333333333333333333
.Dessin.Les graphiques ont des propriétés DpiX et dpi. DpiX est le nombre de pixels par pouce horizontalement. L'IRM est en pixels par pouce verticalement. Utilisez ceux-ci pour convertir des points (72 points par pouce) en pixels.
Ex: 14 points horizontaux = (14 * DpiX) / 72 pixels
sûrement toute cette question devrait être:
" Comment puis-je obtenir le PPI horizontal et vertical (Pixels par pouce) du moniteur?"
il y a 72 points par pouce (par définition, un" point "est défini comme 1/72nd de pouce, de même qu'un" pica " est défini comme 1/72nd de pied). Avec ces deux informations, vous pouvez convertir px de pt et arrière très facilement.
points = (pixels / 96) * 72 de la norme XP/Vista/7 machine (réglages par défaut)
points = (pixels / 72) * 72 sur un standard de Mac OSX (paramètres d'Usine)
Windows s'exécute par défaut à 96 dpi (display) Mac exécuter en tant que par défaut à 72 dpi (affichage)
72 Points POSTSCRIPT = 1 pouce 12 Points POSTSCRIPT = 1 Pica POSTSCRIPT 6 Picas POSTSCRIPT = 72 Points = 1 inch
1 point = 1⁄72 pouces = 25,4⁄72 mm = 0,3527 mm
DPI = points par pouce PPI = Pixels par pouce LPI = lignes par pouce
complément d'information Si vous utilisez em comme mesure
16px = 1em (par défaut pour un texte normal) 8em = 16px * 8 Pixels / 16 = em
Cela fonctionne:
int pixels = (int)((dp) * Resources.System.DisplayMetrics.Density + 0.5f);
lignes de hauteur converties en points et pixels (ma propre formule). Voici un exemple avec une entrée manuelle de 213,67 points dans le champ Row Height:
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
ici l'entrée manuelle de 213,67 points donne 284 pixels.
Ici l'entrée manuelle de 213.68 points donne 285 pixels.
(pourquoi 0,45? Je ne sais pas, mais il fonctionne.)