1

到目前为止,我使用纹理(位图字体)进行字体渲染,但我正在尝试让 freetype2 工作。我所有的字符串都是 SHIFT_JIS 编码的,我现在唯一的问题是从 freetype 获得正确的字形到正确的 SHIFT_JIS 位序列。但这似乎比我预期的要难。例如,“亜”的字符代码为“0x889F”(字节 1 设置为 136,字节 2 设置为 159) - 这是根据 SHIFT_JIS 编码的。所以我调用了这个函数:

FT_Select_Charmap(face, FT_ENCODING_SJIS);

然后尝试使用该字符码加载字形:

FT_Load_Char(face, 0x889F, FT_LOAD_RENDER ); 

但我收到一些随机字形。这不可能是特定于字体的问题,因为我已经尝试了具有相同结果的不同字体(是的,它们提供了 shift-jis Charmap)。例如,“0”(零)应该在位置 0x0030 - 但实际上它在 0x002D。并非所有字符的恒定偏移量都为 3,否则不会有问题......我认为我的“FT_Load_Char”调用以错误的方式传递了 charcode 参数 - 但无法猜测它是如何正确的。已经尝试过:

FT_Load_Char(face, FT_Get_Char_Index(face, 0x889F), FT_LOAD_RENDER ); 

但随后我收到另一个随机字形。那么,如果没有选择默认的charmap,我如何将charcode传递给FT_Load_Char?

任何建议都会非常有帮助。谢谢你。

4

1 回答 1

0

如果有人稍后会发现类似的问题:我最终将字符代码即时转换为 unicode(使用 icu4c)。似乎很多日文 SJIS 字体标题存在问题(它们无法通过 freetype 枚举选择 - 仅当您列出其中一种字体的所有可用字符集,然后手动选择正确的 - 平台 ID 和编码 ID 是'所有这些字体也不相同)。但这不是我需要的合适解决方案(因为使用不同的字体),所以我最终决定使用 Icu4c。

希望这对某人有所帮助。

于 2010-12-17T00:35:36.120 回答