gpt4 book ai didi

java - 在 Java 中缩放字符串以从内部适合矩形

转载 作者:行者123 更新时间:2023-11-29 06:02:39 25 4
gpt4 key购买 nike

谁能帮我找到一种方法来在 Java (Graphics2D) 中缩放字符串/字符以完全适合给定大小的矩形(以便它从内部接触矩形)?

这是我目前所拥有的:

String s = "S"; // always a single character!
Rectangle rect = getRect(); // defines the desired size and position
AffineTransform transform = new AffineTransform();
transform.setToTranslation(rect.getX(), rect.getY());
transform.scale(rect.getWidth() / (double) fm.stringWidth(s),
rect.getHeight() / (double) fm.getAscent());
FontRenderContext frc = image.getFontRenderContext();
TextLayout tl = new TextLayout(s, g2d.getFont(), frc);
Shape shape = tl.getOutline(transform);
g2d.setClip(shape);
g2d.fill(shape.getBounds());

问题 我运行这段代码的原因是,虽然字符串被缩放以大致适合矩形大小,但它并不完全适合,即。它不会从内部触及矩形边界(这是我想要它做的!)。

使用不同的字体有帮助吗?我现在使用的是等宽字体。或者,我是否必须以不同的方式进行缩放?

感谢您的帮助!

最佳答案

我想出了一个方法来做我想做的事,并认为我可以分享它:

我的主要问题是不同字符的高度,所以我没有使用字体的上升,而是使用它的轮廓的最大和最小 Y 坐标来计算它的高度。见下文。

String s = "S"; // always a single character!
Rectangle rect = getRect(); // defines the desired size and position
FontMetrics fm = g2d.getFontMetrics();
FontRenderContext frc = g2d.getFontRenderContext();
TextLayout tl = new TextLayout(s, g2d.getFont(), frc);
AffineTransform transform = new AffineTransform();
transform.setToTranslation(rect.getX(), rect.getY());
double scaleY =
rect.getHeight() / (double) (tl.getOutline(null).getBounds().getMaxY()
- tl.getOutline(null).getBounds().getMinY());
transform.scale(rect.getWidth() / (double) fm.stringWidth(s), scaleY);
Shape shape = tl.getOutline(transform);
g2d.setClip(shape);
g2d.fill(shape.getBounds());

希望对遇到类似问题的人有所帮助!

关于java - 在 Java 中缩放字符串以从内部适合矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9589286/

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