129 votes

Convertir des pixels en points

J'ai besoin de convertir des pixels en points en C#. J'ai vu des explications compliquées à ce sujet, mais je n'arrive pas à trouver une formule simple. Supposons un standard de 96dpi, comment puis-je calculer cette conversion ?

213voto

Mark Ransom Points 132545

Il y a 72 points par pouce ; s'il suffit de partir de 96 pixels par pouce, la formule est assez simple :

points = pixels * 72 / 96

Il existe un moyen d'obtenir les pixels par pouce configurés de votre écran dans Windows en utilisant GetDeviceCaps . Microsoft propose un guide intitulé "Développer des applications prenant en compte le DPI" recherchez la section "Création de polices adaptées au DPI".

Le W3C a défini la mesure du pixel px comme exactement 1/96e de 1in quelle que soit la résolution réelle de votre écran, la formule ci-dessus devrait donc être bonne pour tout travail sur le web.

26 votes

72 points par pouce n'est PAS un élément discutable, c'est la même chose pour tout le monde !

11 votes

David : le dpi dépend de l'écran, le ppi est une constante typographique.

3 votes

@David cet article explique simplement pourquoi les moniteurs ont un DPI variable. Le PPI reste le même. Le nombre de kilomètres dans un mile ne change pas en fonction de la voiture que vous conduisez. Supposer 96dpi n'est généralement pas une bonne idée, mais si nous le faisons, la formule donnée est correcte.

59voto

Hejazi Points 5981

Essayez ceci si votre code se trouve dans un formulaire :

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

3 votes

Est-il utile de préciser que DpiX est pour la largeur alors que DpiY devrait être utilisé pour la hauteur ?

26voto

Ian Boyd Points 50743

En commençant par ce qui est donné :

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

Si vous voulez trouver des points (pt) sur la base de pixels (px) :

 72 pt    x pt
------ = -----                  (1) for 150dpi system
150 px    y px

Réarrangement :

x = (y/150) * 72                (2) for 150dpi system

donc :

points = (pixels / 150) * 72    (3) for 150dpi system

1 votes

Dpi dans la première équation devrait être px - pour l'annulation des termes, puisque nous avons l'hypothèse (1) pour le système 150dpi

25voto

Joel Coehoorn Points 190579

En supposant que 96dpi soit une énorme erreur. Même si l'hypothèse est correcte, il existe également une option permettant de mettre les polices à l'échelle. Ainsi, une police définie pour 10 points peut être affichée comme si elle était de 12,5 points (125 %).

9voto

Heind Points 51

WPF convertit les points en pixels avec le convertisseur System.Windows.FontSizeConverter. Le FontSizeConverter utilise le System.Windows.LengthConverter. Le LengthConverter utilise le facteur 1.333333333333333333 pour convertir des points (p) en pixels (x) : x = p * 1.3333333333333333333333

0 votes

Veuillez également expliquer pourquoi cette valeur est utilisée... Par coïncidence, c'est 96 dpi (DPI par défaut de Windows pour les écrans) / 72 dpi (DPI auquel les points sont définis).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X