1

我试图让 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 种字体SansSerifMonospace.

4

2 回答 2

2

我刚刚遇到了与您自己完全相同的问题,但经过大量挖掘后,我设法找到了适合我的解决方案。我一直在使用来自http://www.gtk.org/download/win32.php的预构建 Pango/FreeType/dependencies 库并将运行时 DLL 复制到我的 exe 文件夹中。最后,我还必须从 GTK+ 的多合一版本中复制“/etc/fonts”文件夹作为我的 exe 的子文件夹。然后突然我通过 Pango/FreeType 有了字体!不确定“字体”文件夹的来源是什么。

于 2013-10-30T10:25:57.280 回答
0

你可能需要手动告诉它你的字体文件在哪里,freetype 本身没有默认字体位置的概念,它是一个准系统渲染器(它确实不足以显示 unicode 文本,这就是为什么其他 pango 引擎添加其他库的原因)

pango-cairo 是最完整的 pango 后端 IIRC,除非我错了,否则它会引入 fontconfig。fontconfig 的唯一目的是管理应用程序的字体文件位置,这就是它为您开箱即用的原因

如果您选择的后端确实使用了 fontconfig,请尝试找到它的主 conf 文件并确保默认目录适合您的系统。然后运行 ​​fc-cache

于 2013-09-17T20:35:30.813 回答