使用freetype2对字体进行斜体矩阵变换时的问题
sdl吧
全部回复
仅看楼主
level 7
小二郎998
楼主
说我内容违规
2018年06月11日 03点06分
1
level 7
小二郎998
楼主
问题解决了,总是在那不经意间。
2018年07月05日 01点07分
2
level 1
星点06
你好,我遇到了设置斜体后,位图输出图片然后两个字符之间的间隙变大,不知道这个要怎么处理,能否请教一下
2020年01月07日 10点01分
3
小二郎998
一年没搞都快忘光了。每个字形都有步进 advance 这个可以想象成包含字形的矩形宽度,bearingX为字形距离矩形左边长度。字形斜体转换后不需要考虑overhang,安装正常字形依次渲染即可。
2020年01月08日 01点01分
小二郎998
私信不了,只能发楼下
2020年01月09日 12点01分
level 7
小二郎998
楼主
按照不是安装,拼音打字输错了。
主要还是你对字形的度量认识不够,假设你要在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;
2020年01月09日 12点01分
5
小二郎998
笛卡尔。。。
2020年01月09日 12点01分
星点06
还不是很理解
,有没有完整工程代码发一份参考一下
2020年01月10日 00点01分
星点06
是不是可以这样认为:先计算字体的外框大小,然后在外框的范围里绘字体的实际大小。但是这样的话字体之间是存在间距的,那假如要设置间距为 0 呢?
2020年01月10日 01点01分
小二郎998
@星点06
字形之间合理的间距是确保视觉上的美观,间距为0时字和字之间将会组合或重叠。一定要间距为0,那么就用字形生成的位图宽度作为推进,但是在斜体时你就会看到间距很大,实际上间距为0,你可以在两个字中间画条线看看是不是。
2020年01月10日 03点01分
level 1
Czkt5g-
打扰您,还记得当初这个问题是怎么解决的吗,我遇到一模一样的问题,出问题的字符也是这几个字符
2020年03月09日 03点03分
6
level 1
Czkt5g-
问题解决了,总是在那不经意间
bearing_x 要用 face->glyph->bitmap_left,用 face->glyph->metrics.horiBearingX 就会出现位置不对的问题
2020年03月09日 07点03分
7
level 1
执着战
楼主,有源码啊,想看看具体怎么处理的
2022年08月23日 03点08分
8
1