Java2D - 访问字体CMap来渲染字符。

问题描述 投票:1回答:1

我需要将带有连字符的Emojis打印出来(🇺 + 🇸 = 🇺🇸 )到一个Graphics2D对象中。据我所知,你可以使用 graphics2d.drawString(string, x, y); 或从字体中创建一个GlyphVector,然后将该GlyphVector打印到Graphics2D对象中。

这两种方法都不行,因为它们都不能渲染字符。在Font.中,有一个有趣的方法可以让你用GlyphVector创建一个GlyphVector。createGlyphVector(frc, int[] glyphCodes) 中有一个有趣的方法,它允许你用指定的字形索引创建一个GlyphVector。

问题是。

我怎样才能检索到这样的字形索引呢?手动访问连接字形的索引,我可以解决这个问题。

java.awt.Font 类隐藏了所有允许你访问CMap的API,而我在标准API中没有看到任何访问查询字形的方法。

有什么方法可以做到吗?

java fonts awt java-2d
1个回答
0
投票

我搜索了JAVA,发现createGlyphVector(frc, int[]),这是我使用JAVA从本地代码中显示文本所需要的全部内容。

在我的搜索中,我发现了这个精彩的问题,这正是我所要找的,以验证我们在JAVA中确实有DrawGlyphRuns的D2D等价物。

从原生代码中使用JAVA的替代方案是包含一个库,比如freetype-gl,在原生端做一切事情。

所以我的解决方法是在JAVA中不容易得到cmap数据,是提前准备好特定字体的数据,做成资源数据表。这对于有合理数量Unicode码点的脚本来说,效果非常好,而且非常快。假设cmap数据是稳定的数据。表格占用的内存很少,即使cmap数据很容易获得,也不必为每个字形调用函数,这是很好的。

© www.soinside.com 2019 - 2024. All rights reserved.