J'ai besoin de convertir des 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 96 dpi standard, comment puis-je calculer cette conversion?
J'ai besoin de convertir des 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 96 dpi standard, comment puis-je calculer cette conversion?
Réponses:
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 écran dans Windows en utilisant GetDeviceCaps
. Microsoft a un guide appelé "Développement d'applications DPI-Aware" , recherchez la section "Création de polices DPI-Aware".
Le W3C a défini la mesure des pixels px
comme étant exactement 1 / 96e de 1in quelle que soit la résolution réelle de votre écran, la formule ci-dessus devrait donc convenir à tous les travaux Web.
En supposant que 96 dpi est une énorme erreur. Même si l'hypothèse est juste, il existe également une option pour mettre à l'échelle les polices. Ainsi, un jeu de polices pour 10 points peut en fait être affiché comme s'il s'agissait de 12,5 points (125%).
En commençant par le donné:
Si vous souhaitez rechercher des points (pt) en fonction des pixels (px):
72 pt x pt
------ = ----- (1) for 150dpi system
150 px y px
Réorganiser:
x = (y/150) * 72 (2) for 150dpi system
alors:
points = (pixels / 150) * 72 (3) for 150dpi system
WPF convertit les points en pixels avec le System.Windows.FontSizeConverter. FontSizeConverter utilise le System.Windows.LengthConverter. Le LengthConverter utilise le facteur 1.333333333333333333 pour convertir des points (p) en pixels (x): x = p * 1.3333333333333333
System.Drawing.Graphics a des propriétés DpiX et DpiY. DpiX correspond à des pixels par pouce horizontalement. DpiY correspond à des pixels par pouce verticalement. Utilisez-les pour convertir des points (72 points par pouce) en pixels.
Ex: 14 points horizontaux = (14 * DpiX) / 72 pixels
Toute cette question devrait sûrement être:
"Comment obtenir le PPI (pixels par pouce) horizontal et vertical 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 de px en pt et inversement.
points = (pixels / 96) * 72 sur une machine XP / Vista / 7 standard (paramètres d'usine par défaut)
points = (pixels / 72) * 72 sur un Mac standard exécutant OSX (paramètres d'usine par défaut)
Windows fonctionne par défaut à 96 ppp (affichage) Les Mac fonctionnent 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'informations si vous les utilisez comme mesure
16px = 1em (par défaut pour le texte normal) 8em = 16px * 8 Pixels / 16 = em
Cela marche:
int pixels = (int)((dp) * Resources.System.DisplayMetrics.Density + 0.5f);
Utilisation de wxPython sur Mac pour obtenir le DPI correct comme suit:
from wx import ScreenDC
from wx import Size
size: Size = ScreenDC().GetPPI()
print(f'x-DPI: {size.GetWidth()} y-DPI: {size.GetHeight()}')
Cela donne:
x-DPI: 72 y-DPI: 72
Ainsi, la formule est:
points: int = (pixelNumber * 72) // 72
Lignes de hauteur converties en points et pixels (ma propre formule). Voici un exemple avec une saisie 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, la saisie manuelle de 213,68 points donne 285 pixels.
(Pourquoi 0,45? Je ne sais pas mais ça marche.)