Question

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 ppp, comment calculer cette conversion?

Était-ce utile?

La solution

Il existe 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 à l'aide de GetDeviceCaps . Microsoft propose un guide intitulé "Développement d'applications DPI-Aware" , consultez pour la section "Création de polices DPI-Aware".

Le W3C a défini la mesure de pixels px exactement 1 / 96ème de 1in quelle que soit la résolution réelle de votre affichage, la formule ci-dessus devrait donc convenir à tous les travaux Web.

Autres conseils

Essayez ceci si votre code réside dans un formulaire:

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

En supposant que 96 dpi soit une énorme erreur. 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 réalité être affichée comme si elle était 12.5pt (125%).

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 défini à 150 dpi, il y a 150 pixels par pouce.
  • 1 in = 72pt = 150px (pour un paramètre 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éorganisation:

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

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

Assurément, toute cette question devrait être:

"Comment obtenir les PPI (pixels par pouce) horizontaux et verticaux du moniteur?"

Il y a 72 points dans un pouce (par définition, un "point" est défini à 1 / 72ème de pouce, de même qu'un "pica" est défini à 1 / 72ème de pied). Avec ces deux bits d’information, vous pouvez convertir très facilement du px au pt.

En fait, ce doit être

points = pixels * 96 / 72

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 dpi (affichage) Les Mac fonctionnent par défaut à 72 dpi (affichage)

72 points POSTSCRIPT = 1 pouce 12 points POSTSCRIPT = 1 POSTSCRIPT Pica 6 Picas POSTSCRIPT = 72 Points = 1 pouce

1 point = 1 & # 8260; 72 pouces = 25,4 & # 8260; 72 mm = 0,3527 mm

DPI = points par pouce IPP = 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

Ceci fonctionne:

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

Lignes de hauteur converties en points et en pixels (ma propre formule). Voici un exemple avec une entrée manuelle de 213,67 points dans le champ Hauteur de ligne:

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, la saisie 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 ça marche.)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top