Problème des polices floues de WPF-Solutions

Le problème

est décrit et démontré sur les liens suivants:

Explication: Texte de Clarté dans WPF . Ce lien a la comparaison de police.

je voudrais recueillir toutes les solutions possibles à ce problème. Microsoft Expression Blend utilise WPF mais les polices semblent lisibles.

  • arrière-plan Sombre comme dans Microsoft Expression Blend
  • augmentation de la taille de la police et modification de la police (Calibri ... ) [lien]
  • Embed windows forms [link]
  • utilisez la classe GDI+ et/ou Windows Forms TextRenderer pour afficher du texte sur un bitmap, puis afficher ce bitmap comme contrôle WPF. [lien]

y a-t-il d'autres solutions?

cela va être fixé dans VS2010 (et WPF4) beta 2

WPF 4.0 Pile de Texte Améliorations

IL SEMBLE QU'IL AIT ÉTÉ FINALEMENT RÉSOLU !

Scott Hanselman's ComputerZen.com: WPF et texte flou, maintenant avec une clarté complète

Blog de texte du FPF: améliorations supplémentaires de la clarté du texte du FPF

146
demandé sur Community 2008-10-10 10:50:27

10 réponses

cadre Technique

il y a un article en profondeur sur le texte de WPF rendu par l'un des gestionnaires de programme de texte de WPF sur windowsclient.net: Text Clarity in WPF .

le problème vient du fait que la WPF a besoin d'une police d'échelle linéaire pour des animations lisses. Pur ClearType d'autre part prend un peu de liberté avec la police pour pousser des tiges verticales dans le prochain pixel.

le la différence est évidente si l'on compare le classique "cascade". WinForms sur le côté inférieur gauche, WPF sur le côté en haut à droite:

même si Je ne suis pas fan des idiosyncrasies de rendu de police de WPF non plus, je peux imaginer la clameur si les animations sautent comme ils le font dans la cascade Winforms.

jouer avec le registre

d'un intérêt particulier pour moi était le lien à la MSDN article " ClearType Registry Settings ", qui explique les ajustements côté utilisateur possibles dans le registre:

  • ClearType niveau: le montant de la sous-pixel allusion
  • niveau Gamma
  • Pixel structure: comment les bandes de couleur dans un écran-pixel sont organisés
  • niveau de contraste du texte: ajuste la largeur des tiges de glyphe pour rendre la police plus lourde

jouer avec ces paramètres n'a pas vraiment améliorer le problème sous-jacent, mais peut aider en réduisant l'effet de saignement de couleur pour les utilisateurs sensibles.

une autre approche

le meilleur conseil que l'article sur la clarté du texte donnait était d'augmenter la taille de la police et de changer la police. Calibri fonctionne pour moi mieux que L'interface standard Segoe. En raison de sa popularité comme font web, J'ai essayé Verdana aussi, mais il a un saut méchant dans le poids entre 14pt et 15pt qui est très visible lors de l'animation de la taille de la police.

WPF 4.0

WPF 4 aura un support amélioré pour influencer le rendu des polices. Il y a un article sur le Blog de texte de WPF expliquant les changements. Plus particulièrement, il y a maintenant (au moins) trois types différents de rendu de texte:

text rendering comparison

< grumble>cela devrait suffire corde pour chaque concepteur.< / grumble>

102
répondu David Schmitt 2017-02-08 14:08:36

.NET 4 a finalement une solution à la mauvaise qualité du rendu de texte de WPF, mais elle est bien cachée. Définissez ce qui suit pour chaque fenêtre:

TextOptions.TextFormattingMode="Display"

valeur par défaut est "idéal" qui n'est pas du tout ce que le nom implique.

il y a deux autres options dans TextOptions, à savoir TextHintingMode et TextRenderingMode, mais elles ont toutes deux des valeurs par défaut raisonnables.

118
répondu Helge Klein 2016-06-03 00:31:27

j'ai rencontré un problème l'autre jour lorsque j'ai utilisé une bordure qui avait un Dropshadoweffet appliqué. Il en est résulté que tout le texte à l'intérieur de cette frontière était extrêmement flou. Peu importe si le texte était à l'intérieur d'autres panneaux ou directement sous la frontière - tout bloc de texte qui est l'enfant du parent qui a un effet appliqué semble être affecté.

la solution à ce cas particulier a été de ne pas mettre des choses à l'intérieur de la bordure qui a des effets, mais à la place utilisez une grille (ou n'importe quoi d'autre qui supporte mettre le contenu sur l'autre) et placez un rectangle dans la même cellule que le texte (c.-à-d. comme un frère dans l'arbre visuel) et mettez les effets sur cela.

Comme suit:

<!-- don't do this --->
<Border>
     <Border.Effect>
          <DropShadowEffect BlurRadius="25" ShadowDepth="0" Opacity="1"/>
     </Border.Effect>
     <TextBlock Text="This Text Will Be Blurry" />
</Border>

<!-- Do this instead -->
<Grid>
  <Rectangle>
     <Rectangle.Effect>
          <DropShadowEffect BlurRadius="25" ShadowDepth="0" Opacity="1"/>
     </Rectangle.Effect>
  </Rectangle>
  <TextBlock Text="This Text Will Be Crisp and Clear" />
</Grid>
34
répondu Isak Savo 2009-10-27 15:31:42

cela va être corrigé dans VS2010 (et WPF4) beta 2:

10
répondu Pavel Minaev 2016-08-09 13:23:57

SnapToDevicePixels ne s'applique qu'à WPF, des formes (lignes, etc.), pas de moteur de rendu de texte.

Il n'y a pas de solution connue à ce problème. Selon Microsoft, le comportement est "by design".

Voir aussi ce" fil sur les forums Microsoft discutant des problèmes - il a obtenu quelques réponses DE MS guys qui clarifient leur position sur la question.

6
répondu 2008-11-10 11:31:22

du point de vue du développeur, la seule" solution de rechange " connue à ce jour est d'utiliser la classe GDI+ et/ou Windows Forms TextRenderer pour rendre le texte à un bitmap, puis rendre ce bitmap comme contrôle WPF. Mis à part les implications évidentes sur le rendement, cela ne soulage pas le problème pour les applications existantes.

j'ai maintenant créé un Microsoft Connect ticket pour ce numéro (à ma surprise, malgré toute la négativité, il n'y avait pas de bogue rapport désignés dans le tracker).

étant donné que C'est l'un des canaux officiels de communication des demandes et des questions à Microsoft, je vous conseille également d'y aller pour une réponse plus rapide. Au moins, si vous souhaitez que la question soit abordée d'une manière ou d'une autre, voter pour ce billet et/ou valider la question aidera à attirer l'attention de Microsoft PMs et les ingénieurs sur ce problème, et peut-être soulever sa priorité perçue.

6
répondu David Schmitt 2009-10-27 08:00:10

vient D'essayer la version bêta de VS2010, qui se fait en WPF, et elle souffre beaucoup de la question de la police floue. En particulier sur les info-bulles.

qui semble donner une certaine preuve que WPF4 ne va pas en fait résoudre le problème (si quelque chose semble pire)

4
répondu Orion Edwards 2009-05-19 21:26:22

Wow, je ne peux pas croire que j'ai finalement eu mes polices WPF lisibles. Et je ne peux pas croire qu'il n'y a pas de dialogue d'option pour rendre ces changements faciles alors que les valeurs par défaut sont horribles sur mon écran.

Ces paramètres de registre (en décimal) a travaillé pour moi et le plus proche de mon cleartype de police:

  • ClearTypeLevel: 10 (principalement des niveaux de gris de l'aliasing)
  • GammaLevel: 1300 (higher gamma fait la police trop mince et je voyais les couleurs dans l'alias)
4
répondu VVS 2009-06-12 09:33:43

Je ne le vois pas comme un bug, mais la configuration par défaut est en effet très gênante. Voici une comparaison de toutes les combinaisons de

TextOptions.TextRenderingMode
TextOptions.TextFormattingMode
RenderOptions.ClearTypeHint

SnapToDevicePixels ne fait pas de différence dans le rendu de texte.

http://i.stack.imgur.com/cS3S2.png

je préfère:

TextOptions.TextRenderingMode="Auto"
TextOptions.TextFormattingMode="Ideal"
RenderOptions.ClearTypeHint="Auto"

où les lignes verticales ne sont jamais floues.

la police utilisée est ouverte Sans lumière, qui peut être vraiment belle si elle est bien utilisée,comme dans TeamViewer.

pour ceux qui utilisent Mahapps.Métro, le problème est le TransitioningContentControl https://github.com/MahApps/MahApps.Metro/issues/889

4
répondu Gabriel 2014-04-20 15:44:29

ils disent" SnapToDevicePixels = true " fonctionne, mais je n'ai jamais vu de bons résultats.

je combats le texte flou en passant à une police différente.

évidemment, ce n'est pas une solution au problème, mais c'est comme ça que je l'ai contourné.

3
répondu Inisheer 2008-10-10 07:04:28