Java Graphics Font - 如何确保文本保持在一行?

标签 java image image-manipulation graphics2d

使用 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/

相关文章:

java - java中SDO和JDO的区别

java - 如何使用 Spring 框架实现 Java cron 作业,我正在寻找 Spring Batch 吗?

java - Java 7 中的编译器更改

html - IE 11 不显示嵌入的 base 64 图像

algorithm - 如何计算两个矩形之间的 "distance"?

java - 为什么 Blackberry java 应用程序显示有线对话框?

java - 动态裁剪签名图像

javascript - Canvas html 标签

php - 为我的服务器上的 GD 库调整图像太大

php - PHP中用图案图像填充图像的透明部分