【问题标题】:FreeType2 FT_Outline_Decompose returns huge numbersFreeType2 FT_Outline_Decompose 返回大量数字
【发布时间】:2014-10-12 00:02:49
【问题描述】:

我正在尝试使用 FreeType lib 读取字符的字形轮廓。我从标准 .ttf 文件加载字体。直到现在我使用轮廓标签将轮廓转换为路径元素,如段和贝塞尔曲线。然后我找到了 @ 987654321@ 是库的一部分。但是当我使用它时,分解的数据值很大。路径上的每个点的值约为 859722XXX 。因此,即使按照 64 的因子进行缩减,如它所建议的那样examples 无助于获取像素大小值。

我的代码是这样的:

    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 仍然无关紧要。

【问题讨论】:

    标签: c++ freetype freetype2


    【解决方案1】:

    设置 funcs.shift = 0; funcs.delta = 0; 会工作

    【讨论】:

    • 实际上这是解决方案。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-03
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    • 2017-03-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多