web-dev-qa-db-fra.com

Convertir des pixels en points

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?

120
Todd Davis

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.

186
Mark Ransom

Essayez ceci si votre code se trouve dans un formulaire:

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

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

24
Joel Coehoorn

En commençant par le donné:

  • Il y a 72 points dans un pouce (c'est ce qu'est un point, 1/72 de pouce)
  • sur un système configuré pour 150 dpi, il y a 150 pixels par pouce.
  • 1 po = 72 pt = 150 px (pour un réglage de 150 dpi)

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
18
Ian Boyd

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

10
Heind

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

4
Bubba Tbone

En fait, il doit être

points = pixels * 96 / 72
4
david

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.

4
JeeBee

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

4
spotcatbug

Cela marche:

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