2016-11-22 3 views
0

J'ai la largeur & taille en caractères du futur PNG, besoin de dessiner l'image exacte.Le Caire, obtenir la largeur du caractère latin monospaced pour la surface

int font_height=13, font_width=?; 
cairo_surface_t *surface = cairo_image_surface_create(CAIRO_FORMAT_RGB24, font_width * pic_width_in_chars, font_height * pic_height_in_chars); 
cairo_t *cr = cairo_create(surface); 
cairo_select_font_face(cr, "Consolas", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL); 
cairo_set_font_size(cr, font_height); 
// fill surface by characters, no need help 

Pour "Сonsolas" Je choisi manuellement proportion: font_width = font_height * 3/5; Mais comment l'obtenir de l'API?

Merci, extents.x_advance est ce que je cherche.

Répondre

1

Vous ne pouvez pas faire cela, car la largeur d'un seul glyphe dépend du caractère. Vous pouvez calculer toute la largeur en ajoutant la largeur de chacun ou en utilisant la chaîne entière pour le faire.

Dans le cas de polices à espacement fixe, la largeur de tout caractère est égale à la largeur de tout autre caractère. Donc, si vous en calculez un, vous pouvez le multiplier par le nombre de caractères de la chaîne.

Donc, la réponse courte est

  • Il n'y a pas d'unité largeur des caractères, sauf dans les polices à espacement fixe.

L'utilisation de cairo_text_extents() peut aider à calculer rapidement la largeur de la chaîne. S'il s'agit d'une police à espacement fixe, utilisez simplement un caractère arbitraire et utilisez-le comme largeur d'unité.

+0

J'utilise une police monospace, et j'ai trouvé la proportion 3/5 manuellement pour la largeur/hauteur du caractère – biv