Pango和FreeType - 不渲染文本,只是奇怪的像素

时间:2013-09-15 18:49:38

标签: c freetype pango

我正在尝试让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只是我的帮助类,我知道这是有效的,因为我可以用随机颜色填充它们并显示出来。

这是呈现的内容:

enter image description here

我想尝试让该文字正确显示。


编辑:在修复图像的位深度并使用FreeType引擎从裸Pango FreeType切换到Pango Cairo后,问题变得更加清晰。

使用此行:

font_map = pango_cairo_font_map_new_for_font_type(CAIRO_FONT_TYPE_WIN32);

产生

enter image description here

当我浏览pango_font_map_list_families时,我得到了一个很长的系统安装字体列表。

但是,如果我将其更改为此,请使用FreeType:

font_map = pango_cairo_font_map_new_for_font_type(CAIRO_FONT_TYPE_FT);

它产生

enter image description here

然后我的系统上突然只有3种字体,SansSerifMonospace

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

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

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