按照不是安装,拼音打字输错了。
主要还是你对字形的度量认识不够,假设你要在xy(0,0)位置渲染一个字形A,首先你应该获得此字形的一些基本度量信息。
1、字体的基线
auto scale = m_face->size->metrics.y_scale;
baseline = FT_CEIL(FT_MulFix(m_face->ascender, scale)); // 基于基线上行高度
2、字形的相对偏移
glyph->xoffset = (short)(FT_FLOOR(metrics.horiBearingX));
glyph->yoffset = -(short)(FT_FLOOR(metrics.horiBearingY)); // Freetype使用卡迪尔坐标,这里对Y轴翻转变成屏幕坐标
3、字形的步进
glyph->advance = FT_CEIL(metrics.horiAdvance);
字形位图的宽度不等于步进,当字形发生斜体转换位图的宽度也会增加,但在字形渲染时使用步进而非位图宽度。
因此渲染A字形如下:
x=x+glyph->xoffset;
y=y+baseline+glyph->yoffset;
w=bitmap.width;
h=bitmap.rows;
渲染此字形。。。
使用字形步进推进X
x=x+glyph->advance;