Différence de taille de police dans .NET GDI +?

Je cherche à comprendre l’écart entre les tailles de police que les utilisateurs sélectionnent ou spécifient (par exemple, à l’aide de FontDialog ) et la taille em indiquée par la classe Font dans .NET.

Par exemple:

using (FontDialog dlg = new FontDialog()) { if (dlg.ShowDialog() == DialogResult.OK) { Console.WriteLine("Selected font size: " + dlg.Font.SizeInPoints.ToSsortingng("0.##")); } } 

En utilisant le code ci-dessus, vous obtiendrez des résultats déroutants:

La sélection de 11 dans la boîte de dialog produit 11,25

La sélection de 12 dans la boîte de dialog produit 12

La sélection de 14 dans la boîte de dialog produit 14,25

La sélection de 16 dans la boîte de dialog produit 15,75

Ce problème se produit indépendamment de la police que vous choisissez. Comme vous pouvez le voir ci-dessus, il n’y a pas de motif dans cet écart, il semble varier de manière aléatoire entre +0.25 et -0.25.

Je contourne cela dans les interfaces utilisateur en affichant uniquement la taille de la police sous forme de nombre entier arrondi, mais je jure que j’ai vu des packages de traitement de texte / PAO permettant aux utilisateurs de sélectionner des tailles de police fractionnelles – et ces packages ne présentent pas le comportement ci-dessus. lors de l’interaction avec les boîtes de dialog de fonts Windows.

Quelqu’un peut-il fournir une explication rationnelle à cela? Existe-t-il une technique recommandée pour afficher la taille de la police dans une interface utilisateur? Qu’en est-il lorsque l’utilisateur souhaite une taille fractionnaire telle que “10.5”?

il n’y a pas de motif dans la divergence

Comme vous pouvez le constater, la taille des fonts est définie par incréments de 0,75.

Edit: Vous pouvez affiner les tailles si vous n’utilisez pas la boîte de dialog de la police, mais les résultats, je suppose, seront moins satisfaisants que les tailles “préférées”.

Considérez ces petites choses:

  • Un pouce, en raison de la manière dont ces choses sont décidées dans l’histoire, contient 72 points.
  • Les utilisateurs exécutent généralement Windows avec une résolution logique de 96 points par pouce.
  • Hmm, OK, nous avons des points, des pouces et des points – trois unités à gérer ici.
  • GDI veut savoir combien de points dessiner et l’utilisateur sélectionne des points .
  • Enfin, le rapport 72 points par pouce / 96 points par pouce = 0,75 point par point.

Ce 0,75 est regrettable! Cela signifie que si nous permettons à l’utilisateur de choisir des points directement vers le haut, le rendu idéal ne s’appuierait que sur une partie d’un point logique. Ce serait bien si nous pouvions aligner le rendu entier vers le point logique le plus proche.

Prêt? Et c’est parti!


  • 11:
    • 11 points / 72 points par pouce = 0,153 pouce * 96 points par pouce = 14,667 points, BARF!
    • Arrondissons à 15 points,
    • SO puis 15 points / 96 points par pouce * 72 points par pouce = 11,25 points.

  • 12:
    • 12/72 * 96 = 16 points.
    • Je peux vivre avec ça, pas besoin de mélanger.

  • 16:
    • 16/72 * 96 = 21,3333, BARF!
    • Arrondissons à 21 points / 96 * 72 = 15,75, bien plus agréables.

Vous avez eu l’idée.

Rappelez-vous que ces chiffres changeront si l’utilisateur change de résolution logique (96 dpi, 120 dpi, etc.)