FreeType错误:FT_Load_Char返回36

时间:2013-06-27 16:35:41

标签: c++ c freetype

我一直在尝试让FreeType在我的游戏中运行,但是每当我尝试从字体加载字符时它似乎都不起作用。我在网上看了很多教程,据我所知,代码似乎没有任何问题。

我尝试使用不同的字体,但它们会产生相同的错误。

这是失败的代码:

int errorCode = FT_New_Face(freetype, filename.c_str(), 0, &face);
if (errorCode != 0)
{
    std::cerr << "Failed to load font: " << filename << ". Error code: " << errorCode << std::endl;
}

for (char i = 0; i < 256; i++)
{
    errorCode = FT_Load_Char(face, i, FT_LOAD_RENDER); // This returns 36 when i is 0
    if (errorCode != 0)
    {
        std::cerr << filename << ": Failed to load character '" << i << "'. Error code: " << errorCode << std::endl;
    }
}

打印出来:

  

FreeSans.ttf:无法加载字符''。错误代码:36

我在FreeType标题中查找了错误代码36,它似乎是“Invalid_Size_Handle”。这让我很困惑,因为没有大小处理函数传递的位置。唯一的大小句柄我可以想到face-&gt; size属性,但是由于face结构在FT_New_Face函数中初始化,所以它应该没有任何问题。

是的,我之前在代码中初始化了FreeType。

那么,有人知道我做错了什么以及我能做些什么来解决这个问题?

2 个答案:

答案 0 :(得分:4)

我有一次相同的错误代码。我想“Invalid_Size_Handle”意味着字体大小而不是内存大小设置无效。

我通过在 FT_New_Face 之后添加对 FT_Set_Char_Size 的调用来修复此问题。希望能有所帮助。

答案 1 :(得分:1)

尝试在加载面后设置字体大小:

int errorCode = FT_New_Face(freetype, filename.c_str(), 0, &face);
if (!errorCode)
    std::cerr << "Failed to load font: " << filename << ". Error code: " << errorCode << std::endl;

int pensize = 64;
FT_Set_Pixel_Sizes(face, pensize, 0);

// you can now load the glyphs
希望它有所帮助!