gpt4 book ai didi

java - Java中如何使字体适合像素大小?如何将像素转换为点?

转载 作者:行者123 更新时间:2023-12-01 14:21:09 26 4
gpt4 key购买 nike

我需要创建给定大小的字体(以像素为单位)。

Java 的 Font 类构造函数需要以点表示的字体大小。点是物理长度,而像素是数字化的。所以我需要dpi

手册中说,该值包含在 FontRenderContext.getTransform() 中。

我发现,就我而言,缩放是一,即像素 = 点。

不幸的是,创建大小为 100 的字体会创建更大的图像。

例如下面的代码

    BufferedImage ans = new BufferedImage(width, height, imageType);
Font font = new Font(fontName,fontStyle,height);

Graphics2D g2 = ans.createGraphics();

g2.setFont(font);

FontMetrics fm = g2.getFontMetrics();
FontRenderContext frc = g2.getFontRenderContext();

System.out.println("height=" + height);
System.out.println("frc.getTransform()=" +frc.getTransform());
System.out.println("g2.getTransform()=" +g2.getTransform());
System.out.println("fm.getAscent()+fm.getDescent()="+fm.getAscent()+"+"+fm.getDescent()+"="+(fm.getAscent()+fm.getDescent()));


g2.drawString(str, 0, fm.getAscent());

给出

height=100
frc.getTransform()=AffineTransform[[1.0, 0.0, 0.0], [0.0, 1.0, 0.0]]
g2.getTransform()=AffineTransform[[1.0, 0.0, 0.0], [0.0, 1.0, 0.0]]
fm.getAscent()+fm.getDescent()=93+20=113

如何适配?

最佳答案

在绘制字符串时,我使用此代码来确定字符串的大小(以像素为单位)。

x 和 y 计算将字符串置于绘图区域的中心。 y 计算看起来很奇怪,因为 y 原点位于左下角,而不是左上角。

@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);

if (font == null) {
return;
}

Graphics2D g2d = (Graphics2D) g;
FontRenderContext frc = g2d.getFontRenderContext();
TextLayout layout = new TextLayout(sampleString, font, frc);
Rectangle2D bounds = layout.getBounds();

int width = (int) Math.round(bounds.getWidth());
int height = (int) Math.round(bounds.getHeight());
int x = (getWidth() - width) / 2;
int y = height + (getHeight() - height) / 2;

layout.draw(g2d, (float) x, (float) y);
}

关于java - Java中如何使字体适合像素大小?如何将像素转换为点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17551537/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com