2010-12-14 74 views
2

J'utilise GDI pour dessiner du texte dans un contexte de périphérique, et j'ai remarqué que le crénage ou le placement de caractère est différent si l'angle est exactement 0, 90, 180 ou 270. Dès que j'augmente l'angle de 1, le placement des caractères diffère sensiblement.Utilisation de Win32 TextOut pour tracer un texte en biais

Plutôt que de créer un HFONT avec l'angle, j'utilise ModifyWorldTransform pour transformer les coordonnées du contexte du périphérique, puis j'utilise TextOut pour dessiner le texte sur le contexte du périphérique.

Je pense que GDI utilise des conseils de police ou d'autres techniques spéciales lorsque le texte est dessiné à des multiples exacts de 90 degrés, mais pas pour aucun autre angle.

Y at-il un moyen de désactiver cette indication, de sorte que le texte rendu à 0 degrés ne diffère pas de façon significative du texte rendu à 1 degré?

Voici un exemple de ce que je veux dire (Monotype police Corsiva):

0 degrés:
0 degrees

1 degré:
1 degree

Pour certaines polices, telles comme Arial ou Tahoma, ce n'est pas aussi visible, mais je voudrais me débarrasser entièrement de la différence, même si ns le texte n'est pas rendu le mieux possible.

Répondre

1

Je pense que cela est dû à l'anti-aliasing plutôt que des conseils de police. Vous pouvez essayer ce qui suit:

  • Désactiver (police) AA, mais cela ne donnera pas des résultats acceptables.
  • Créez des poignées de police pour chaque angle possible et voyez si le problème persiste. Je suppose que non, mais ce n'est pas une belle solution.
  • Rendu le texte à une image bitmap (par exemple, en utilisant CreateCompatibleBitmap()) le rendre le texte et ensuite rendre le bitmap pivoté. Cela dépend de la fréquence à laquelle vous avez besoin de différentes rotations/texte différent.
  • Jouer avec fdwOutputPrecision et fdwQuality dans CreateFont(). Cela pourrait être la solution la plus simple, mais vous devrez expérimenter un peu, je suppose.

HTH

+0

Merci pour les idées, mais malheureusement, même si je désactive AA, le résultat est le même (sauf le texte n'est pas anti-aliasing). Si je bidouille avec la précision/qualité de CreateFont cela ne change pas non plus le résultat :(Je pense que je vais juste devoir le supporter pour le moment et le réparer quand la gestion me le demande. – dreamlax