关于iPhone:如何在iOS中将文本字符串转换为一组折线?

How to convert a text string into a set of polylines in iOS?

我有一个字符串例如" Hello world"和字体名称,例如"信使"。 我需要获取代表此字符串的折线数组。 这些折线将在OpenGL场景中渲染。

我的意思是我需要将每个字母转换为一个或多个2D折线。

如何在iOS(Objective-C或C ++)中执行此操作


您可以使用"核心文字"从文字和字体获取路径。有一个称为CTFontCreatePathForGlyph的Core Text方法,它将为您提供给定符号的给定字形的路径。使用它,您可以获得所有字形的路径。

您应该看一下有关"低级文本呈现"的文章。您也可以查看本文的示例代码,以了解如何获取文本的路径(并使用Core Animation对其进行描边)。

您仍然必须将路径转换为折线(因为路径可能包含圆弧和曲线,而折线只是点列表)


FreeType库支持加载各种字体文件(TrueType,PostScript等)。 FreeType引擎可以加载字体并渲染到位图,但是它还可以返回详细的字形信息。

您可以使用FT_Outline_Decompose函数获取FT_Outline并将其分解为其组成线,圆弧和曲线。您只需在FT_Outline_Funcs结构中提供一系列函数指针,即可在大纲处理过程中调用它们。这些功能由您定义,因此您可以简单地将它们转换为最适合您的应用程序的格式(例如折线)。

API参考:

  • FT_Outline_Decompose()

请注意,如果要渲染不经常更改的大块文本,则在每一帧渲染和填充一系列曲线会非常昂贵。通常的解决方案是选择一个点大小,将所有需要的字形渲染为纹理,然后使用纹理图集将字符串渲染为四边形。

一些有用的信息发布在此处有关字体的OpenGL常见问题之一中,尽管它们也谈到使用FreeType。纹理图集技术值得一读:

  • iPhone SDK是否有不错的OpenGL文本绘制库?