2016-11-22 6 views
0

私は幅が&の将来のPNGの文字の高さを持っている、正確にフィットする画像を描く必要があります。 "Сonsolas" についてはカイロ、表面にモノスペースのラテン文字の幅を取得

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 

私は手動割合選ん: font_width = font_height * 3/5を。しかしAPIからそれをどうやって得るのですか?

ありがとう、extents.x_advanceは私が求めるものです。

答えて

1

1つのグリフの幅がその文字に依存しているため、これを行うことはできません。幅全体を計算するか、文字列全体を使って計算することができます。

モノスペースフォントの場合、任意の文字の幅は他の文字の幅と同じです。だからあなたが1つを計算するならば、それを文字列の文字数で掛けることができます。

だから、短い答えは

  • 文字にはユニット幅が等幅フォントを除き、ありませんです。

cairo_text_extents()を使用すると、文字列の幅をすばやく計算できます。モノスペースフォントの場合は、任意の文字を使用して単位幅として使用してください。

+0

私はモノスペースのフォントを使用していますが、文字の幅/高さに対して手作業で3/5の割合が見つかりました – biv

関連する問題