【问题标题】:Unicode troubles in FreeTypeFreeType 中的 Unicode 问题
【发布时间】:2012-07-15 02:53:08
【问题描述】:

所以,我有一个解析 xml 的实现,其中包括 Wikipedia 主页的位置和字符串。解析是使用 rapidxml 完成的,然后由http://utfcpp.sourceforge.net/ 将字符串从 UTF-8 转换为 UTF-32。然后在 freetype 中使用 UTF-32 代码:

unsigned long c = FT_Get_Char_Index(face,*p);
FT_Load_Glyph(face,c,FT_LOAD_RENDER);

其中 *p 是 UTF-32 字符代码。然后在 OpenGL 中渲染此字形。

现在,我似乎无法使用 cryllic 字符,也无法使用任何中文、日文或越南文,我确信 *p 对应于正确的代码,如果我能得到任何指示,我将不胜感激。

对于这些使用 Microsoft 的 arial.ttf 字体,来自 Arch linux package 和我在 fontviewing 程序中看到的,它应该包含我想要的字符。

【问题讨论】:

    标签: c++ unicode fonts freetype


    【解决方案1】:

    不要忘记在加载面部后立即设置字体大小。

    FT_Error err =  FT_Set_Pixel_Sizes(face, (width), (height));
    

    【讨论】:

      【解决方案2】:

      有两点建议:

      首先,您是否致电FT_Select_Charmap 指定您使用的是Unicode 编码?

      FT_Select_Charmap(face , ft_encoding_unicode);
      

      其次,并非所有 Arial 字体都具有所有字符,并且某些字体查看器(无论如何在 Windows 上)可能会通过自动替换来自不同面的字形来误导。如果你能找到,试试ArialUni.ttf

      【讨论】:

      • 感谢您的建议!使用 FT_Select_Charmap 没有产生任何不同的结果,我猜 unicode 是 freetype 的默认值?是否有任何包含我正在寻找的字符的免费字体可以推荐?
      • 回复。字体,我将从这里开始:en.wikipedia.org/wiki/Unicode_typeface - 另一件要检查的事情是在调用FT_Get_Char_Index 之前设置断点,并准确检查您传递的代码点。在您使用 rapidxml 或 utfcpp 时可能存在错误...
      • Freetype 的默认编码取决于您使用的字体以及其他一些因素。我建议明确指定编码。
      • 你能尝试构建一个失败的最小示例吗? FT_Library library; FT_Face face; FT_Init_FreeType( &library ); FT_New_Face( library, "monofont.ttf", 0, &face ); FT_Get_Char_Index(face, 0x43f); - 但在每种情况下都会返回检查错误!
      • 我对此做出了自己的回答,感谢您的帮助,它导致了我的错误。是的,最小的构建工作。
      猜你喜欢
      • 2011-01-21
      • 2014-11-21
      • 1970-01-01
      • 2013-03-21
      • 2015-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-20
      相关资源
      最近更新 更多