开罗,获取表面等宽拉丁字符的宽度

Cairo, get width of monospaced latin character for surface

我在未来的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正是我所求

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

对于等宽字体,任何字符的宽度都等于任何其他字符的宽度。因此,如果计算一个,则可以将其乘以字符串中的字符数。

所以简短的回答是

  • 字符没有 unit 宽度,等宽字体除外。

使用cairo_text_extents()可以帮助快速计算字符串的宽度。如果是等宽字体,就用任意一个字符作为单位宽度即可。