我试图让 Pango 控制 FreeType。我已经成功地将 FreeType 渲染为位图,但 Pango 似乎不知道发生了什么,我显然没有正确地做某事。
这是我目前正在使用的代码:
font_map = pango_ft2_font_map_new();
pango_ft2_font_map_set_resolution(PANGO_FT2_FONT_MAP(font_map), 72, 72);
cr = pango_font_map_create_context(PANGO_FONT_MAP(font_map));
font_description = pango_font_description_new ();
pango_font_description_set_family (font_description, "Courier New");
pango_font_description_set_weight (font_description, PANGO_WEIGHT_BOLD);
pango_font_description_set_absolute_size (font_description, 32 * PANGO_SCALE);
layout = pango_layout_new(cr);
pango_layout_set_font_description(layout, font_description);
pango_layout_set_text(layout, "Some sample text!", -1);
pango_context_set_font_description(cr, font_description);
FT_Bitmap bitmap = { 0 };
bitmap.width = drawBitmap.get()->getWidth();
bitmap.rows = drawBitmap.get()->getHeight();
bitmap.pitch = bitmap.width * 4;
bitmap.buffer = (unsigned char*)drawBitmap.get()->getDataPtr();
bitmap.num_grays = 256;
bitmap.pixel_mode = FT_PIXEL_MODE_GRAY;
pango_ft2_render_layout(&bitmap, layout, 100, 100);
drawBitmap
只是我的助手类,我知道这很有效,因为我可以用随机颜色填充它并且它们会出现。
这是渲染的内容:
我想尝试让该文本正确显示。
编辑:在修复图像的位深度并使用 FreeType 引擎从裸 Pango FreeType 切换到 Pango Cairo 之后,问题已经得到了更清晰的解决。
使用这条线:
font_map = pango_cairo_font_map_new_for_font_type(CAIRO_FONT_TYPE_WIN32);
生产
当我运行时pango_font_map_list_families
,我会得到一长串安装在我的系统上的字体。
但是,如果我将其更改为此,使用 FreeType:
font_map = pango_cairo_font_map_new_for_font_type(CAIRO_FONT_TYPE_FT);
它产生
然后我的系统上突然只有 3 种字体Sans
,Serif
和Monospace
.