6

小背景。。

我正在使用JavaLWJGL制作 OpenGL 游戏。我编写了一个TextRenderer使用缓存的字形页面呈现文本的类。字形本身在 Java2D 中呈现为BufferedImages 并与字形测量一起打包到纹理页面中。TextRenderer使用缓存的信息将字符绘制为带纹理的四边形。

所有这一切都很好,除了一件事:缺少字距调整。当然,没有必要因为文本看起来很好,但如果我可以访问字体字距调整信息,它会提高质量。

问题是..

是否有可能使用纯 Java 以一种可在 Windows、Linux 和 MacOS X 之间移植的方式获取字距调整信息?当我写这篇文章时,TextRenderer我短暂地环顾四周,但找不到这样的方式..

一种可能的解决方案

如果在纯 Java 中无法做到这一点,我正在考虑使用Freetype编写一个单独的工具。如其功能页面中所列:

FreeType 2 提供了其他类似字体引擎通常无法提供的信息,例如字距调整、字形名称、垂直度量等。

该工具会将常用字符的字距调整对存储到我的文本渲染器将加载并使用的文件中。所以如果你们没有提出更好的选择,这可能就是我会做的。:)

4

2 回答 2

2

从 Java SE 6 开始,Java 可以在字体提供时提供字距调整信息。它默认是关闭的,可以像这样打开:

Map<TextAttribute, Object> textAttributes = new HashMap<TextAttribute, Object>();  

textAttributes.put(TextAttribute.FAMILY, "Arial");  
textAttributes.put(TextAttribute.SIZE, 25f);  
textAttributes.put(TextAttribute.KERNING, TextAttribute.KERNING_ON);  

Font font = Font.getFont(textAttributes);  

此论坛主题包含有关该主题的更详细讨论:

http://forums.sun.com/thread.jspa?threadID=5359127

于 2009-06-15T19:02:18.780 回答
1

我所知道的唯一能正确读取字距调整信息“somwhat”的库是来自 Apache的iTextFOP 。

http://www.1t3xt.info/api/com/lowagie/text/pdf/BaseFont.html http://svn.apache.org/viewvc/xmlgraphics/fop/tags/fop-0_95/src/java/org /apache/fop/fonts/(到 svn 的链接,因为似乎没有在线 api)

于 2009-06-15T15:31:36.983 回答