到目前为止,我使用纹理(BitMapfont)进行字体渲染,但是我试图使Freetype2工作。我所有的字符串均为shift_jis编码,我唯一的问题现在是从freetype到正确的glyph到适当的shift_jis bitsequence。但这似乎比我预期的要难。示例“亜”具有charCode“ 0x889f”(字节1设置为136,字节2为159) - 这是根据shift_jis编码的。因此,我调用了该函数:

FT_Select_Charmap(face, FT_ENCODING_SJIS);

然后尝试加载带有该charcode的字形:

FT_Load_Char(face, 0x889F, FT_LOAD_RENDER ); 

但是我收到一些随机的字形。这不能是特定于字体的问题,因为我尝试了以相同结果的不同字体(是的,它们提供了shift-jis carmap)。示例“ 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?

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

有帮助吗?

解决方案

如果有人稍后会发现这个问题:我最终将角色代码即时转换为Unicode(使用ICU4C)。似乎有很多日本SJIS字体标头的问题(它们无法通过freetype枚举选择 - 仅当您列出了其中一种字体的所有可用charsets,然后手动选择正确的 - 平台ID和编码ID AREN所有这些字体也相同)。但这不是我需要的适当解决方案(因为使用不同的字体),因此我最终决定使用ICU4C。

希望这对某人有帮助。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top