Java - 没有图形的FontMetrics

pio*_*rek 31 java awt font-size fontmetrics

如何在不使用Graphics的情况下获取FontMetrics?我想在构造函数中获取FontMetrics,现在我这样做:

BufferedImage bi = new BufferedImage(5, 5, BufferedImage.TYPE_INT_RGB);
FontMetrics fm = bi.getGraphics().getFontMetrics(font);
int width = fm.stringWidth(pattern);
int height = fm.getHeight();
Run Code Online (Sandbox Code Playgroud)

Lon*_*zak 30

不,您不一定需要获取/使用图形对象:

Font font = new Font("Helvetica",Font.PLAIN,12);
Canvas c = new Canvas();
FontMetrics fm = c.getFontMetrics(font);
Run Code Online (Sandbox Code Playgroud)

如果你现在调用c.getGraphics()它将返回null.这个(画布)也可以在无头模式下工作.

  • 如果我可以稍微扩展一下这一点 - 如果您正在从文件中读取字体,请记住“派生”具有可行大小的字体(不记得这样做将导致诸如 getMaxAscent/Descent 之类的值返回 1 ): `字体 sourceFont = Font.createFont(Font.TRUETYPE_FONT, fontStream);` 字体 awtFont = sourceFont.deriveFont(72.0f);` `Canvas canvas = new Canvas();` `FontMetrics 指标 = canvas.getFontMetrics(awtFont );` (2认同)

amo*_*fis 21

嗯......你需要图形来获得FontMetrics是很合乎逻辑的.字体高度,宽度等可以在各种显示器上不同.

如果您有一些Component,可以使用它来获取FontMetrics:

component.getFontMetrics(font);
Run Code Online (Sandbox Code Playgroud)