你怎么做自己的字体?我不想要重量级算法(freetype、truetype、adobe 等),并且可以使用预渲染的位图字体。
我确实想要抗锯齿,如果可能的话,我想要比例字体。
我听说我可以使用 Gimp 进行渲染(进行一些后期处理?)
我正在开发带有 LCD 的嵌入式设备。它有一个 32 位处理器,但我不想运行 Linux(矫枉过正 - 太多的代码/数据空间,而我会使用的功能太少)
C. 必要时使用 C++,但首选 C。算法和想法/概念在任何语言中都很好......
-亚当
在我以前的演示场景中,我经常在一张大的位图图像中绘制字体中的所有字符。在代码中,我存储了字体中每个字符的 (X,Y) 坐标,以及每个字符的宽度。整个字体的高度通常是恒定的。如果空间不是问题,您可以将所有字符放在一个网格中,即 - 每个字符的左上角之间的距离恒定。
然后,渲染文本变成了一次将一个字母复制到目标位置的问题。那时,我通常保留一种颜色作为“透明”颜色,但今天你绝对可以为此使用 alpha 通道。
可用于小型黑白字体的一种更简单的方法是直接在代码中定义字符:
LetterA db 01111100b
db 11000110b
db 11000110b
db 11111110b
db 11000110b
db 11000110b
XPM 文件格式实际上是一种具有 C 语法的文件格式,可以用作存储字符的混合解决方案。
预渲染位图字体可能是要走的路。使用任何东西渲染您的字体,将字符排列在网格中,并将图像保存为简单的未压缩格式,如 PPM、BMP 或 TGA。如果您想要抗锯齿,请确保使用支持透明度的格式(BMP 和 TGA 支持;PPM 不支持)。
为了支持比例宽度,您需要从网格中提取每个字符的宽度。没有简单的方法可以做到这一点,这取决于您如何生成网格。您可能可以编写一些简短的小程序来分析每个字符并找到最小的边界框。获得宽度数据后,将其放入包含每个字符的坐标和大小的辅助文件中。
最后,要渲染一个字符串,您查找每个字符并将其矩形从字体位图中位blit 到您的帧缓冲区,将光栅位置推进字符的宽度。
我们已经成功地将 SRGP 包用于字体。我们确实使用了固定间距字体,所以我不确定它是否可以成比例的字体。
我们正在使用由 anglecode#s 位图字体生成器生成的位图字体:
http://www.angelcode.com/products/bmfont/
这非常有用,因为它具有 XML 输出,可以轻松转换为您需要的任何数据格式。
Angel Code 的 bmfont 还为 MudFont 的旧替代品添加了字距调整和更好的包装。