FontMetrics 返回错误的字符大小
FontMetrics returning wrong character size
由于我在 LWJGL 项目上工作,它遇到了显示文本的问题。
理论上,我想遍历(扩展的)ascii table 并将所有字符的每个纹理保存在 ArrayList 中。
但我的问题是在创建字符图像时无法获得正确的尺寸。尺寸似乎是 1(宽)x 3(高)
代码:
private static BufferedImage createCharImage(Font font, char c) {
BufferedImage image = new BufferedImage(100, 100, BufferedImage.TYPE_INT_ARGB);
Graphics2D graphics = image.createGraphics();
// As you see, I set the font size to 100 for testing
font.awtFont.deriveFont(100);
graphics.setFont(font.awtFont);
FontMetrics fontMetrics = graphics.getFontMetrics();
graphics.dispose();
// Here the problem appears that the dimensions seem to be w: 1 and h: 3
Vector2i charDimensions = new Vector2i(fontMetrics.charWidth(c), fontMetrics.getHeight());
if (charDimensions.x == 0) {
return null;
}
image = new BufferedImage(charDimensions.x, charDimensions.y, BufferedImage.TYPE_INT_ARGB);
graphics = image.createGraphics();
graphics.setFont(font.awtFont);
graphics.setPaint(java.awt.Color.WHITE);
graphics.drawString(String.valueOf(c), 0, fontMetrics.getAscent());
graphics.dispose();
return image;
}
有人可以帮我吗?
或者,如果您有其他解决方法,请告诉我
您的代码中的 font.awtFont.deriveFont(100);
行目前除了浪费时间创建新字体然后立即丢弃它并改用原始字体外,实际上什么也没做。
Derive the new font 然后使用它:
....
Font bloodyHuge = font.awtFont.deriveFont(100);
graphics.setFont(bloodyHuge);
...
由于我在 LWJGL 项目上工作,它遇到了显示文本的问题。 理论上,我想遍历(扩展的)ascii table 并将所有字符的每个纹理保存在 ArrayList 中。
但我的问题是在创建字符图像时无法获得正确的尺寸。尺寸似乎是 1(宽)x 3(高) 代码:
private static BufferedImage createCharImage(Font font, char c) {
BufferedImage image = new BufferedImage(100, 100, BufferedImage.TYPE_INT_ARGB);
Graphics2D graphics = image.createGraphics();
// As you see, I set the font size to 100 for testing
font.awtFont.deriveFont(100);
graphics.setFont(font.awtFont);
FontMetrics fontMetrics = graphics.getFontMetrics();
graphics.dispose();
// Here the problem appears that the dimensions seem to be w: 1 and h: 3
Vector2i charDimensions = new Vector2i(fontMetrics.charWidth(c), fontMetrics.getHeight());
if (charDimensions.x == 0) {
return null;
}
image = new BufferedImage(charDimensions.x, charDimensions.y, BufferedImage.TYPE_INT_ARGB);
graphics = image.createGraphics();
graphics.setFont(font.awtFont);
graphics.setPaint(java.awt.Color.WHITE);
graphics.drawString(String.valueOf(c), 0, fontMetrics.getAscent());
graphics.dispose();
return image;
}
有人可以帮我吗? 或者,如果您有其他解决方法,请告诉我
您的代码中的 font.awtFont.deriveFont(100);
行目前除了浪费时间创建新字体然后立即丢弃它并改用原始字体外,实际上什么也没做。
Derive the new font 然后使用它:
....
Font bloodyHuge = font.awtFont.deriveFont(100);
graphics.setFont(bloodyHuge);
...