说明:
我正在通过 JOGL 用 Java 编写一个 OpenGL 应用程序。 GLUT 的内置字体非常基本。我希望能够采用 Java 字体,将其中的所有字符渲染为 2D 字节数组(表示字符的灰度图像),然后我可以将其作为纹理加载到 OpenGL 中。
问题:
我可以在OpenGL中加载纹理;我可以使用 JOGL。我唯一的问题是从“Font java cn read”-->“所有字符的二维灰度图像步骤”开始。我应该使用哪些函数/库?
最佳答案
我不确定我是否完全理解您在寻找什么。我认为您想要的是一些代码,可以为字体中的每个字形生成给定大小的灰度位图图像。
没有办法(无论如何我都知道)来获取字体支持的所有字形(奇怪的是,你可以获得字形的数量......所以是的,我可能只是错过了一些东西,呸) 。但是,您可以非常轻松地获取给定字符的字形度量。
这些内容应该适合您。
HashMap<int[], Rectangle2D> generateGlyphs(int fontSize, String characters, Font font){
HashMap<int[], Rectangle2D> ret = new HashMap<int[], Rectangle>();
FontRenderContext rendCont = new FontRenderContext(null, true, true);
for(int i = 0; i < characters.length; i++){
Rectangle2D bounds = font.getStringBounds(characters.substring(i, 1), rendCont);
BufferedImage bi = new BufferedImage((int)bounds.getWidth(), (int)bounds.getHeight(), BufferedImage.TYPE_INT_GRAY);
Graphics g = bi.getGraphcs();
g.setFont(font);
g.drawString(characters.substring(i, 1), 0, (int)bounds.getHeight());
ret.put(bi.getData().getPixels(0, 0, (int)bounds.getWidth(), (int)bounds.getHeight()), bounds);
}
return ret;
}
请注意,我在某些地方进行了裁剪而不是四舍五入,这可能是一个问题。
关于java - 光栅化 Java 字体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2017221/