J'ai besoin de convertir des pixels en points en C #. J'ai vu des explications compliquées sur le sujet, mais n'arrive pas à trouver une formule simple. Supposons une résolution standard de 96 dpi, comment calculer cette conversion?
Il y a 72 points par pouce ; s'il suffit de supposer 96 pixels par pouce, la formule est assez simple:
points = pixels * 72/96
Il existe un moyen d'obtenir les pixels configurés par pouce de votre affichage dans Windows en utilisant GetDeviceCaps
. Microsoft propose un guide intitulé "Développement d'applications DPI-Aware" , recherchez la section "Création de polices DPI-Aware".
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 affichage, la formule ci-dessus devrait donc convenir à tout travail Web.
Essayez ceci si votre code se trouve dans un formulaire:
Graphics g = this.CreateGraphics();
points = pixels * 72 / g.DpiX;
g.Dispose();
En supposant que 96 dpi est une erreur énorme. Même si l'hypothèse est correcte, il existe également une option pour redimensionner les polices. Ainsi, une police définie pour 10pts peut en fait être affichée comme s'il s'agissait de 12,5 pts (125%).
En commençant par le donné:
Si vous souhaitez rechercher des points (pt) basés sur des pixels (px):
72 pt x pt
------ = ----- (1) for 150dpi system
150 px y px
Réarrangement:
x = (y/150) * 72 (2) for 150dpi system
alors:
points = (pixels / 150) * 72 (3) for 150dpi system
WPF convertit les points en pixels avec System.Windows.FontSizeConverter. FontSizeConverter utilise System.Windows.LengthConverter. LengthConverter utilise le facteur 1,333333333333333333 pour convertir les points (p) en pixels (x): x = p * 1,3333333333333333
points = (pixels/96) * 72 sur une machine standard XP/Vista/7 (paramètres par défaut)
points = (pixels/72) * 72 sur un Mac standard fonctionnant sous OSX (paramètres par défaut)
Windows fonctionne par défaut à 96 ppp (affichage) Les Mac s'exécutent par défaut à 72 ppp (affichage)
72 points POSTSCRIPT = 1 pouce 12 points POSTSCRIPT = 1 POSTSCRIPT Pica 6 POSTSCRIPT Picas = 72 points = 1 pouce
1 point = 1/72 pouces = 25,4 ± 72 mm = 0,3527 mm
DPI = points par pouce PPI = pixels par pouce LPI = lignes par pouce
Plus d'infos si vous utilisez em comme mesure
16px = 1em (valeur par défaut pour le texte normal) 8em = 16px * 8 pixels/16 = em
En fait, il doit être
points = pixels * 96 / 72
Sûrement toute cette question devrait être:
"Comment puis-je obtenir les valeurs horizontale et verticale PPI (pixels par pouce) du moniteur?"
Il y a 72 points dans un pouce (par définition, un "point" est défini comme 1/72ème de pouce, de même un "pica" est défini comme 1/72ème de pied). Avec ces deux informations, vous pouvez convertir très facilement du px au pt.
System.Drawing.Graphics a les propriétés DpiX et DpiY. DpiX est pixel par pouce horizontalement. DpiY est pixel par pouce verticalement. Utilisez-les pour convertir des points (72 points par pouce) en pixels.
Ex: 14 points horizontaux = (14 * DpiX)/72 pixels
Cela marche:
int pixels = (int)((dp) * Resources.System.DisplayMetrics.Density + 0.5f);