首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有unicode的FreeType [错误]

带有unicode的FreeType [错误]
EN

Stack Overflow用户
提问于 2014-03-07 03:45:58
回答 4查看 1.7K关注 0票数 0

我初始化FreeType的方式如下:

代码语言:javascript
复制
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;

我得到的字形如下:

代码语言:javascript
复制
    // 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类型。

但我看到以下几点:

EN

回答 4

Stack Overflow用户

发布于 2014-03-07 05:31:53

我在unicode字符上也遇到了同样的问题,最后我发现问题出在从UTF8字符串到UTF16 (wstring)的转换上。我使用mbstowcs函数进行转换,但是像‘like’这样的符号并没有像预期的那样转换。对我来说,使用新的C++11 std::wstring_convert类可以很好地工作。试试这个:

代码语言:javascript
复制
std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>, wchar_t> convert;
const std::wstring wideText = convert.from_bytes(_text);

现在将wideText字符串传递给FreeType。

票数 1
EN

Stack Overflow用户

发布于 2017-06-20 05:10:25

我猜为了初始化一个带有宽字符的字符串,你需要像这样初始化它们:

代码语言:javascript
复制
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格式的字符串。

票数 1
EN

Stack Overflow用户

发布于 2016-11-11 18:32:21

可能太晚了,但我也有同样的问题。原因是您使用了错误的函数来加载字符/字形。

您所要做的就是用FT_Load_Glyph替换FT_Load_Char

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22234407

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档