java - 光栅化 Java 字体

标签 java fonts

说明:

我正在通过 JOGL 用 Ja​​va 编写一个 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/

相关文章:

Java - 如何防止 WindowClosing 实际关闭窗口

java - 无法在 Linux 中加载库 MediaInfo

java - 从 .dat 文件中检索数据

javascript - 默认 ckeditor 配置中缺少字体标签

java - 使用 soundcloud api 进行搜索的订单

java - 对 ExceptionHandler 类进行单元测试

delphi - Delphi 中的字体平滑

ios - iPhone-在 PickerView 中设置字体列表

windows - @font-face : Why does this single font letter look different on Windows?

javascript - 有没有一种优雅的方式来处理支持使用多种字体和一个词