我想要绘制一个具有特定维度/边界的字符串。
我知道如何画字符串,我知道如何测量字符串,这是一个经常被问到的问题。我还知道在不同的操作系统上对Java的不同dpi处理,并且我知道Java根据您所绘制的Graphics2D对象的维度调整字符串大小。
我想做这样的事情:
graphics2d.drawString("Hello World", width, height);(当然,上面的示例将显示位置、宽度和高度的文本)。
有什么有效的方法来做我想做的事吗?
我还找到了一个非常低效率的解决方案来解决我的问题:
谢谢您抽时间见我。
发布于 2015-02-05 17:14:55
在社区的友好帮助下,我写了这个方法。我添加了一些评论,以表明(呃)没有张贴全班。有人对我感兴趣,我可以把全班都贴出来。
/**
* Renders a string to a translucent image and returns it
* @param string the text, like "Hello World"
* @param size an enum, like SMALL, MIDDLE, LARGE
* @param graphics the graphics of the scene, used for measuring the string-dimension
* @return
*/
public BufferedImage renderTextToImage(String string, Size size, Color color, Graphics graphics) {
Vector2 imageDimension = this.getFontDimensionPixels(string, size, graphics); // helper which measures string using fontmetrics
BufferedImage returnImage = new BufferedImage(
Max.maxInt((int)imageDimension.getX(), 1), // Max.maxInt() is a little helper to get the bigger out of two values
Max.maxInt((int)imageDimension.getY(), 1),
Transparency.TRANSLUCENT);
Graphics2D returnGraphics = returnImage.createGraphics();
returnGraphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
returnGraphics.setFont(this.getFont(size));
returnGraphics.setColor(color);
returnGraphics.drawString(string, 0, returnImage.getHeight() * 0.8f);
returnGraphics.dispose();
return returnImage;
}发布于 2015-02-05 16:44:24
Java JLabel通过调用ui.getPreferredSize(this)来确定它们的首选大小。通常,标签的ui是BasicLabelUI,它内部使用java.awt.FontMetrics计算绘制字符串所需的宽度。
由于FontMetrics的接口非常容易,所以您可能应该使用它,而不是尝试双重呈现字符串。
https://stackoverflow.com/questions/28348706
复制相似问题