我的目标是在图像上附加文字并保存图像。我可以在图像上附加文字。 我的问题是如何为文本指定区域,以及如何使其成为多行,以便数据不会越过边框。 代码: -
public Test()
{
s = "Welcome TO Image Rendering";
s1="Title data";
s2="DescriptionA fast paced action thriller about a stunt driver.He finds himself a target for some dangerous men after he agrees to help his beautiful neighbour, Irene. Subtitles: Chinesedata";
Font f = new Font("Serif",Font.BOLD,22);
text = new JLabel("Welcome TO Image Rendering");
text.setFont(f);
AttributedString astr = new AttributedString(s);
astr.addAttribute(TextAttribute.FOREGROUND, Color.red, 0, 1);
MediaTracker mt = new MediaTracker(this);
image = Toolkit.getDefaultToolkit().createImage("c://Ci_Audio.jpg");
mt.addImage(image,0);
try{mt.waitForID(0);}catch(InterruptedException ie){}
int width = image.getWidth(null);
int height = image.getHeight(null);
BufferedImage bimg = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
bimg.createGraphics().drawImage(image, 0, 0, this);
bimg.getGraphics().setFont(f);
bimg.getGraphics().drawString(s,10,50);
bimg.getGraphics().drawString(s1,38,40);
bimg.getGraphics().drawString(s2,188,84);
img = new ImageIcon(bimg);
label = new JLabel(img);
p = new JPanel();
p.add(label);
getContentPane().add(p);
}
public static void main(String args[])
{
Test tt = new Test();
tt.setDefaultCloseOperation(EXIT_ON_CLOSE);
tt.setSize(360,305);
tt.setVisible(true);
}
}
此处字符串s2不适合图像屏幕。在此先感谢。
答案 0 :(得分:0)
在设置了计划使用的字体后,可以在当前图形上调用getFontMetrics()。然后,FontMetrics.stringWidth(your_string)将为您提供当前字体中的字符串宽度,就像它在BufferedImage中显示的那样。然后,您可以构建字符串,直到它超出图像的宽度,然后为下一行开始另一个字符串。一旦拆分字符串并知道需要包含多少行/字符串,就必须弄清楚字符串位置的垂直偏移。这次再次使用fontMetrics来获取字符串高度进行计算。
这是一个类似的问题,提供了一个简单的拆分版本:
Full-justification with a Java Graphics.drawString replacement?
这是一个实用程序类,在给定FontMetrics和字符串的情况下为您完成了大量的工作 http://www.java2s.com/Code/Java/2D-Graphics-GUI/WrapstringaccordingtoFontMetrics.htm
其他人可以评论我确定更新的Java版本是否具有与此相关的其他功能。