我初始化FreeType的方式如下:
if (FT_Init_FreeType(&ft)) {
printf("couldn't init freetype\n");
exit(1);
}
std::string fontPath = "D:/fonts/newscycle-bold.ttf";
if (FT_New_Face(ft, fontPath.c_str(), 0, &face)) {
printf("couldn't open font\n");
exit(1);
}
FT_Select_Charmap(face, ft_encoding_unicode);
FT_Set_Pixel_Sizes(face, 0, size);
g = face->glyph; // declaration like FT_GlyphSlot g;我得到的字形如下:
// load the w_char into the face object
if (FT_Load_Char(face, c, FT_LOAD_RENDER))
printf("freetype is unable to load char: %c\n", c); // this runs if error was occured我使用wchar_t*和wchar_t类型。
但我看到以下几点:

发布于 2014-03-07 05:31:53
我在unicode字符上也遇到了同样的问题,最后我发现问题出在从UTF8字符串到UTF16 (wstring)的转换上。我使用mbstowcs函数进行转换,但是像‘like’这样的符号并没有像预期的那样转换。对我来说,使用新的C++11 std::wstring_convert类可以很好地工作。试试这个:
std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>, wchar_t> convert;
const std::wstring wideText = convert.from_bytes(_text);现在将wideText字符串传递给FreeType。
发布于 2017-06-20 05:10:25
我猜为了初始化一个带有宽字符的字符串,你需要像这样初始化它们:
wchar_t c = L'آ';
wchar_t w = _T('آ');
wchar_t *s = L"Hآ文";
wchar_t *q = _T("Hآ文");但是,如果在运行时加载字符串,则必须将字符串转换为ut16或utf-32,方法是在某些文本编辑器中将字符串文件另存为utf-16或utf-32文件,或者使用函数将utf-8格式的字符串转换为utf-16格式的字符串。
发布于 2016-11-11 18:32:21
可能太晚了,但我也有同样的问题。原因是您使用了错误的函数来加载字符/字形。
您所要做的就是用FT_Load_Glyph替换FT_Load_Char。
https://stackoverflow.com/questions/22234407
复制相似问题