使用 Graphics2D,我想在图像中显示文本,但我希望它显示在一行中。这意味着如果文本比图像长,尺寸将会减小(调整)
我该怎么办?
到目前为止,这就是我所做的,但我确信这真的很糟糕。
int fontSize = 66;
FontRenderContext frc = new FontRenderContext(null, true, true);
element = null;
do { // we turn until the size goes into the image
fontSize -= 2;
layout = new TextLayout(myText, new Font(font, Font.BOLD, fontSize), frc);
element = layout.getPixelBounds(null, 0, 0);
if (fontSize <= 12) {
throw new Exception ("Title too long.");
}
} while(element.width > image.getWidth());
我该怎么办?
感谢您的帮助。
最佳答案
当我将文本放入特定显示的圆圈内时,我必须做同样的事情。您唯一可以做得更好的事情是,不要使搜索成为线性搜索,而是使其成为二进制搜索。这将为您带来更好的整体性能。除此之外,您的方法很好 - 我认为这与您在 Java 中将文本调整到特定屏幕尺寸一样好。
还有一些编码语义问题 - 如果您在常规 while 循环中执行此操作,这可能会更具可读性。
另一个问题是您抛出的异常。最好将其放入一个返回某个值的函数中,该值指示文本是否可以绘制在特定图像上。如果使用简单的条件语句可以获得相同的行为,那么使用抛出的异常来确定程序逻辑绝不是一件好事。
关于Java Graphics Font - 如何确保文本保持在一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9999450/