TrueType字体在C中解析

我想读取一个ttf并在缓冲区上绘制带有该字体的文本。 即使有像freetype,gd这样的库来执行此任务,我也想编写自己的代码。 你能告诉我如何完成这项任务吗?

除非你是世界顶级的字体,排版和书写系统专家之一,否则答案很简单: 不要 。 TrueType / OpenType有很多表需要支持正确的渲染,即使使用FreeType(这是一个极低级别的库),大多数人都会弄错。

如果您需要进行低级,确定性跨平台字体处理,那么至少应该使用FreeType和libotf。 这将使您可以访问字形和轮廓,然后您可以随意渲染它们。 在大多数情况下,虽然使用GUI系统的文本渲染例程将更容易,更不容易出错。

最后,如果你坚持忽略我的建议,FreeType上的一个好的RTFS和微软的在线资源解释TrueType / OpenType字体中的表可能是最好的开始。

我建议你

  1. 阅读您可以找到的所有TTF文档

  2. 找到所有可以找到的开源TTF解析器+渲染器,有许多不同的语言,例如Freetype(c / c ++),Batik(java)以及其他任何你可以google的东西。 乔治·威廉姆斯的fontforge也许对你的旅程非常有帮助。

  3. 撕掉你在1中收集的所有程序,看看它们是如何工作的。 看看你是否可以做一个小小的示例程序来做一些简单的事情,比如转储字母“I”轮廓的点列表。

  4. 处理光栅化。 从非常简单的事情开始,比如光栅化字母“l”。

TTF的问题在于没有简单的文件格式,而freetype会为您处理许多疯狂的细节。 但是,如果您不关心可移植性,并且您已经有一个特定的TTF文件要渲染,而您只关心一个简单的小字母,如拉丁语或西里尔语,那么您可能没问题。

您也可以查看我从我的小项目https://github.com/donbright/font_to_svg/链接到的TTF文档列表。

对于其他试图尝试的人来说并非不可能。 我很好奇这样做,因为我喜欢DIY图形方法,我分配一些内存并写入其中,然后保存为jpg或png。 我从giflib盗取了一个位图字体,但严格来说是8×8像素。

一些链接: http://stevehanov.ca/blog/index.php?id=143http://stevehanov.ca/blog/index.php?id=143 https://github.com/kv01/ttf-parser https://www.google.com/search?q=ttf+parser+c&ie=utf-8&oe=utf-8 http://stevehanov.ca/blog/index.php?id=143 https://github.com/kv01/ttf-parser https://www.google.com/search?q=ttf+parser+c&ie=utf-8&oe=utf-8

我尝试缩进4并使用{}按钮,但线仍然包裹。

正如我在评论中写的那样,我不打算建议你自己建立另一个TTF解析器。 如果你渴望学习计算机科学的这个“spannende”领域,我会推荐Donald E. Knuth的“计算机编程艺术”第2卷。 (它是Metafont,不是TTF,但被certificate是正确的:-)