为什么FreeType在某些像素字体上不前进image_left?

问题描述

使用FT_Set_Transform通过以下代码执行文本渲染:

    // mTypeface is a FreeType face
    auto scaled_metric = mTypeface->size->metrics;
    FT_Vector pen = { 0,0 };
    for ( int k = 0; k < mContent.length(); ++k )
    {
        FT_Set_Transform( mTypeface,nullptr,&pen );

        int re = FT_Load_Char( mTypeface,FT_ULong( chars[k] ),FT_LOAD_RENDER | ( ( !mHinting ) ? FT_LOAD_NO_HINTING : 0 ) | int( mRenderMode ) );
        if ( re != FT_Err_Ok ) abort();

        // paste glyph image to "big" image at (paint_x,paint_y) top-left position
        int paint_x = mTypeface->glyph->bitmap_left;
        int paint_y = int( ( scaled_metric.ascender >> 6 ) - mTypeface->glyph->bitmap_top );
        paintOneGlyphImage( tmpImage,{ paint_x,paint_y },mTypeface->glyph->bitmap );

        pen.x += mTypeface->glyph->advance.x;
        pen.y += mTypeface->glyph->advance.y;
    }

它适用于大多数字体。但是对于某些自制的像素字体-尤其是当它使用 FontForge 具有多个自动生成的像素级别时,值mTypeFace->glyph->bitmap_left始终为零,因此所有字形图像都在最左侧重叠。 / p>

暂时,我将paint_x的计算更改为int paint_x = int( pen.x >> 6 )。但是我不知道它是否可以与矩阵转换一起正常工作。

我对TTF / OTF标准没有太多经验,所以我不知道它是由错误生成的字体文件或对FreeType对象属性错误使用引起的。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...