Java:获取具有特定高度(以像素为单位)的字体

标签 java fonts graphics2d fontmetrics

使用 FontMetrics 可以很容易地确定字体的呈现高度,但是反过来呢?如何获得适合特定高度(以像素为单位)的字体?

"Give me Verdana in a size that is 30 pixels high from ascender to descender."

我如何向 Java 请求这个?

最佳答案

我知道这是一个非常古老的问题,但仍然有人可能会发现它:

The font height in Java (and many other places) is given in "typographic points", which are defined as roughly 1/72nd of an inch.

要计算特定像素高度所需的点,您应该能够使用以下内容:

double fontSize= 72.0 * pixelSize / Toolkit.getDefaultToolkit().getScreenResolution();

我还没有对此进行广泛的测试,但它似乎适用于我使用过的显示器。如果我发现它不起作用,我会报告。

对于我使用过的标准系统字体,这会将大写字母(即上升)的高度设置为提供的像素大小。如果需要将上升+下降设置为像素大小,可以使用 FontMetrics 更正该值:

FontMetrics m= g.getFontMetrics(font); // g is your current Graphics object
double totalSize= fontSize * (m.getAscent() + m.getDescent()) / m.getAscent();

当然,一些特定字母的实际像素高度将取决于字母和使用的字体,所以如果你想确保你的“H”是一些确切的像素高,你可能仍然想要使用其他答案中提到的试错法。请记住,如果您使用这些方法来获取要显示的每个特定文本的大小(如@Bob 建议的那样),您最终可能会在屏幕上出现随机字体大小困惑,其中文本如“ace” "将有比 "Tag"大得多的字母。为避免这种情况,我会选择一个特定的字母或字母序列(“T”或“Tg”或其他)并将其固定为您的像素高度一次,然后使用您从中获得的字体大小。

关于Java:获取具有特定高度(以像素为单位)的字体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5829703/

相关文章:

java - Java2D 中的文本旋转

java - 在另一幅图像下旋转一幅图像

java - 在java中使用Method.invoke时忽略异常检查

java - 我怎样才能 "erase"我在 Java Graphics2D Canvas 上绘制的东西而不删除它后面的东西?

java - 在java中生成UTC时间

html - 下载的字体不显示特殊字符

r - 更改基本 R 图中的字体

html - 将 My Onsen Ui 2 App 文件夹复制到新电脑, Material 字体消失

java - 使用动态值覆盖 Junit 测试中的默认 Spring-Boot application.properties 设置

java - Spring的TestNG回滚事务不起作用