1

我一直在尝试让 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->size 属性,但它不应该有任何问题,因为 face 结构是在 FT_New_Face 函数中初始化的。

是的,我确实在代码中早些时候初始化了 FreeType。

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

4

2 回答 2

4

我曾经得到同样的错误代码。我猜“Invalid_Size_Handle”意味着字体大小而不是内存大小设置无效。

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

于 2013-08-12T04:53:29.050 回答
3

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

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

希望能帮助到你!

于 2017-06-19T21:44:41.817 回答