问题描述
使用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 (将#修改为@)