FreeType2 FT_Outline_Decompose возвращает огромные числа

Я пытаюсь прочитать контур глифа для символа, используя FreeType lib.I загружаю шрифт из стандартного файла .ttf. До сих пор я использовал теги контура для преобразования контура в элементы пути, такие как сегменты и кривые Безье. Затем я нашел FT_Outline_Decompose который является частью lib.But, когда я использую его, значения декомпозированных данных огромны. Каждая точка на пути имеет значение ~ 859722XXX. Так что даже уменьшение масштаба с коэффициентом 64, как это предлагается Примеры не помогает получить значения размера пикселя.

Мой код выглядит так:

    const char* fontFile ="fonts/Verdana.ttf";
std::string chars("Uta \n");

char charcode = chars[0];

FT_Library defLibHandle;
FT_Error err = FT_Init_FreeType(&defLibHandle);
if(err){
printf(ft_errors[err].err_msg);
throw;
}
FT_Face faceHandle;
err = FT_New_Face(defLibHandle,fontFile,0,&faceHandle);

if(err){
printf(ft_errors[err].err_msg);
throw;
}FT_Glyph glyph;

// load glyph

err = FT_Load_Char(faceHandle,
charcode,
FT_LOAD_NO_BITMAP | FT_LOAD_NO_SCALE);
if (err) {
std::cout << "FT_Load_Glyph: error\n";
}

//FT_Get_Glyph(faceHandle->glyph, &glyph);
FT_Outline  outline = faceHandle->glyph->outline;

if (faceHandle->glyph->format != ft_glyph_format_outline) {
std::cout << "not an outline font\n";
}FT_Outline_Funcs funcs;
funcs.move_to =  (FT_Outline_MoveTo_Func)&moveTo;
funcs.line_to =  (FT_Outline_LineTo_Func)&lineTo;
funcs.conic_to = (FT_Outline_ConicTo_Func)&conicTo;
funcs.cubic_to = (FT_Outline_CubicTo_Func)&cubicTo;
// trace outline of the glyph
err = FT_Outline_Decompose(&outline,
&funcs, nullptr);
if (err) {
std::cout <<ft_errors[err].err_msg ;
}

Теперь в обратных вызовах типа moveTo () я пытаюсь изменить размер:

int moveTo(FT_Vector* to, void* fp) {

pathRef->moveTo(ftVecToFloat(to)); ///
// ftVecToFloat is "float(f) / 64.0f" ///

return 0;
}

Но первоначальное значение FT_Vector настолько велико, что деление на 64.0 все равно не имеет значения.

1

Решение

задавать
funcs.shift = 0;
funcs.delta = 0;
буду работать

0

Другие решения


По вопросам рекламы [email protected]