我实际上正在研究一种将自由字形字形转换为折线以控制激光打标系统的渲染器。我遇到的问题是我不知道如何正确处理以偏离曲线点开始的轮廓(99.9% 以曲线点开始!)。我已经搜索了很长一段时间的信息,但我找不到任何有用的信息。
谢谢你的帮助
FreeType 使用三种类型的点:曲线上、二次控制点(也称为“圆锥”)和三次控制点。二次控制点与它们任一侧的曲线上点组合在一起,形成定义二次贝塞尔样条所需的三个点。三次控制点必须成对出现,并与任一侧的曲线上点组合在一起,以构成三次贝塞尔样条曲线所需的四个点。
但是,只有二次点有一个简写符号。在二次点彼此相邻出现的情况下,在它们之间插入一个曲线上控制点。还有另一种约定,如果闭合路径以二次点开始,则检查路径的最后一个点,如果是二次点,则在它们之间插入一个曲线上点,然后将路径从曲线上的点;如果最后一个点不是二次控制点,则它本身用作起点。
如果您想确切了解这是如何完成的,请查看 FreeType 源代码。函数 FT_Outline_Decompose 遍历路径并将其转换为两种类型的一系列直线和曲线。它在这个文件中:
http://git.savannah.gnu.org/cgit/freetype/freetype2.git/tree/src/base/ftoutln.c
特别感兴趣的部分从这条评论开始(再次注意,在这种情况下,“圆锥”与“二次”的含义相同):
/* first point is conic control. Yes, this happens. */