Le dessin du texte .NET
Je suis en train de faire quelques tests sur le dessin du texte .Net et j'ai eu les résultats suivants.
- La première chaîne est un natif de l'Étiquette avec le
FlatStyle
ensemble deSystem
- La deuxième chaîne est dessiné à l'aide de
Graphiques.Cordon de serrage()
méthode - Le dernier est dessiné à l'aide de
TextRenderer.DrawText()
méthode
Tous les cas, utilisez la valeur par défaut de Windows Vista/7 police: Segoe UI, 9
Comme vous pouvez le voir, il y a une différence entre la deuxième chaîne, et les autres (c'est de moins bonne qualité, et de l'anti-alias est différent). J'ai essayé de configurer l'anti-alias et le lissage de la mode dans le Graphics
objet, sans aucun résultat.
Est-il possible de dessiner du texte avec la Graphics.DrawString
et obtenir la même qualité que les autres méthodes?
Merci d'avance.
EDIT: j'ai passé en revue le code avec Réflecteur. J'ai réalisé que Graphics.DrawString
utilise gdiplus.dll appelant la méthode GdipDrawString() et TextRenderer.DrawText
utilise user32.dll appel DrawTextExW
et DrawTextExA
.
Tout commentaire à ce sujet?
Oui, voir mes modifications
Vous êtes en manque juste la
AntiAlias
option...Eu ce même problème sur Windows XP. Ayant ClearType activé a été à l'origine du problème. (Vous perdez les "bords", de sorte que la police bord devient "polyédrique". Je ne sais pas si vous pouvez l'activer ClearType désactivé dans Windows 7.
J'ai utilisé: //'Seulement anti-alias fonctionne lorsque l'utilisateur a activé clair-type.
g.TextRenderingHint = Drawing.Text.TextRenderingHint.AntiAliasGridFit
OriginalL'auteur Daniel Peñalba | 2011-09-01
Vous devez vous connecter pour publier un commentaire.
GDI+ Microsoft était la première tentative de résolution du rendu indépendant du texte. Et la seule façon de rendre le texte .NET 1.x. Il a obtenu largement décrié pour ses problèmes de qualité, d'où l'introduction de TextRenderer et de l'Application.SetCompatibleTextRenderingDefault ().NET 2.0. Il utilise l'interface graphique pour dessiner le texte, de manière efficace de résoudre les problèmes. Vous devez uniquement utiliser des Graphiques.Cordon de serrage() sur la haute résolution des appareils. Les imprimantes.
Fwiw, la deuxième tentative a été WPF et il a également eu beaucoup de flack pour floue texte de problèmes. Résolu .NET 4.
Essayez cet exemple de formulaire de voir l'un des pires problèmes:
OriginalL'auteur Hans Passant
Code suivant vient d'un exemple sur MSDN:
J'ai testé et il a bien fonctionné, une douceur de texte a été élaboré sur ma forme!!! 😉 Voici le lien vers le l'article.
Ok, il y a une petite différence, mais si vous utilisez "TextRenderingHint.AntiAliasGridFit", la qualité est égale. J'ai reproduit mon exemple avec une Étiquette pour vérifier les résultats! 🙂
Eh bien, il a travaillé pour moi. Merci beaucoup! 🙂
OriginalL'auteur Abbas
La
Graphics.DrawString
méthode réside dans leSystem.Dessin
espace de noms, ce qui signifie qu'il utilise GDI+ sous les couvertures au lieu de GDI, qui est ce que laTextRenderer.DrawText
méthode.Il ressemble à la cause de la différence dans ce cas est l'anti-aliasing. Vous pouvez contrôler l'anti-aliasing par le biais de la
Graphiques.TextRenderingHint
propriété.Je crois que vous pouvez aussi le désactiver sur un par la police à l'aide de la méthode indiquée par Abbas.
OriginalL'auteur Justin
À l'écart des autres suggestions, qui sont probablement plus correct dans votre cas, vous pouvez également essayer d'utiliser un Octree la Quantification de l'image.
Je l'utilise pour les images normales, pas pour le texte.
Microsoft a un article qui parle dans les détails à ce sujet et a un exemple de projet:
http://msdn.microsoft.com/en-us/library/aa479306.aspx
OriginalL'auteur Durden81