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 * alibrary);

新しいFreeTypeライブラリオブジェクトを初期化します。この関数によって登録されるモジュールのセットは、ビルド時に決定されます。

outputalibrary新しいライブラリオブジェクトへのハンドル。

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 に答える