2016-11-22 59 views
0

我有宽度&未来的PNG字符高度,需要绘制精确适合的图片。开罗,得到等宽的拉丁字符表面的宽度

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 

对于 “Сonsolas” 我挑选手动比例: font_width = font_height * 3/5;但如何从API中获取?

谢谢,extents.x_advance是我所追求的。

回答

1

你不能那样做,因为单个字形的宽度取决于它是哪个字符。你可以计算整个宽度加上每一个的宽度,或者使用整个字符串来完成。

在等宽字体的情况下,任何字符的宽度等于任何其他字符的宽度。所以如果你计算一个,你可以乘以字符串中的字符数。

那么简单的答案是

  • 没有单位宽度字符,除了在等宽字体。

使用cairo_text_extents()可以帮助快速计算字符串的宽度。如果是等宽字体,只需使用任意字符并将其用作单位宽度即可。

+0

我使用等宽字体,我发现手动比例3/5字符的宽度/高度 – biv