2010-12-10 49 views
2

J'ai un problème avec le rendu Pango sous une matrice pivotée. J'essaye de dessiner une étiquette (voir le code ci-dessous) qui se produit à l'intérieur d'une rotation de matrice de Caire d'animation. Au fur et à mesure que l'étiquette tourne, le texte gronde, semblant grossir et rétrécir, devenir plus épais aux angles diagonaux et plus mince aux angles orthogonaux. Voir cette comparaison:Pourquoi les polices de Pango changent-elles de poids lorsque le texte est pivoté au Caire?

http://www5.picturepush.com/photo/a/4666818/640/Anonymous/pango-rotation.jpg

Je voudrais que le texte pivotée pour générer comme si elle était juste en rotation des tracés de forme, et ne pas essayer de changer l'apparence du texte en fonction de l'angle. Des idées de comment je pourrais faire ça?

Merci, Sean


     //Draw text with Pango 
     PangoLayout *layout; 
     PangoFontDescription *desc; 

     // pCr is the cairomm context ptr. 
     // pCr->cobj() is the underlying C Cairo context ptr. 
     pCr->set_source_rgb(0.0, 0.0, 1.0); 

     layout = pango_cairo_create_layout(pCr->cobj()); 
     // text is the label string 
     pango_layout_set_text(layout, text.c_str(), -1); 

     desc = pango_font_description_from_string("Sans Bold 12"); 
     pango_layout_set_font_description(layout, desc); 

     pango_cairo_layout_path(pCr->cobj(), layout); 
     pCr->fill(); 

     pango_font_description_free(desc); 
     g_object_unref(layout); 

Répondre

0

Je ne peux pas utiliser le Caire et Pango avec Python, C, mais ma première estimation serait de bricoler ANTIALIAS:

pCr.set_antialias(cairo.ANTIALIAS_DEFAULT)

(ce est la syntaxe pour python, pas C)

Vous pouvez essayer cairo.ANTIALIAS_SUBPIXEL ou cairo.ANTIALIAS_NONE pour voir si ther e est une différence.

De même, je n'ai trouvé aucune rotation dans votre code, mais vous pouvez peut-être faire pivoter le texte après le rendu, effectuer d'abord la rotation, puis pixelliser le texte (trajectoires vectorielles).

Espérons que ça aide.