1

我正在尝试使用 FreeType 库编写一个简单的脚本。尽管我使用正确,但在执行 FT_Set_Pixel_Sizes 方法期间会发生段错误。任何帮助都会很棒。这是完整的代码:

#include <ft2build.h>
#include FT_FREETYPE_H

main() {

    FT_Library library;
    FT_Face face;
    FT_GlyphSlot slot;
    FT_UInt glyph_index = 30;
    char* font_file = "/usr/share/fonts/truetype/freefont/FreeMono.ttf";

    // Render font
    FT_New_Face(library, font_file, 0, &face);

    FT_Set_Pixel_Sizes(face, 0, 16); /* THIS LINE IS CAUSING THE SEGFAULT */

    slot = face->glyph;
    FT_Load_Glyph(face, glyph_index, FT_LOAD_DEFAULT);
    FT_Render_Glyph(face->glyph, FT_RENDER_MODE_NORMAL);
}
4

2 回答 2

3

您没有初始化Library变量:请参阅FT_LIBRARY文档。你应该使用FT_Init_FreeType

FT_Init_FreeType

在 FT_FREETYPE_H (freetype/freetype.h) 中定义。

FT_EXPORT( FT_Error ) FT_Init_FreeType( FT_Library *library );

初始化一个新的 FreeType 库对象。此函数注册的模块集在构建时确定。

输出库 新库对象的句柄。

返回 FreeType 错误代码。0 表示成功。

您可以按照本教程首先习惯这个库。也要注意检查返回值...

于 2012-09-08T20:52:19.293 回答
1

您尚未初始化库。

FT_Library library;
error = FT_Init_FreeType(&library);
if (error) { /* report error and exit */ }

您还必须检查函数的返回值,如上所示。例如,FT_New_Face返回一个错误(就像您的情况一样),您不能访问face,因为它处于未定义状态。

于 2012-09-08T20:55:07.950 回答