使用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循环中进行,这可能会更可读。
另一个问题是您抛出的异常。最好把它放在一个函数中,该函数返回一些值,指示文本是否可以绘制在特定的图像上。如果在使用简单的条件语句时可以获得相同的行为,那么使用抛出的异常来确定程序逻辑从来都不是一件好事。