从freetype(Shift JIS编码)检索指定的字形?
题
到目前为止,我使用纹理(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。
希望这对某人有帮助。
不隶属于 StackOverflow