Добавление многострочного текста на изображения и сохранение его - PullRequest
0 голосов
/ 17 января 2012

Моя цель - добавить текст к изображениям и сохранить изображение. Я могу добавить текст на изображение. Мой вопрос: как указать область для текста и как сделать его многострочным, чтобы данные не пересекали границу. Код: -

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);
     }
}

Here String s2 Не подходит к экрану изображения. Заранее спасибо.

1 Ответ

0 голосов
/ 17 января 2012

вы можете вызвать getFontMetrics () для вашей текущей графики после того, как вы установили шрифт, который вы планируете использовать. FontMetrics.stringWidth (your_string) затем даст вам ширину строки в вашем текущем шрифте, как она будет отображаться в вашем BufferedImage. Затем вы можете построить строку, пока она не превысит ширину вашего изображения, а затем начать другую строку для следующей строки. Вам нужно будет определить вертикальные смещения для позиций строк после того, как вы разбили строку и знаете, сколько строк / строк вам нужно включить. Снова используйте fontMetrics, чтобы получить высоту строки для расчета.

Вот аналогичный вопрос, который дает простую версию разбиения:

Полное выравнивание с заменой Java Graphics.drawString?

Вот вспомогательный класс, который выполняет большую часть этой работы за вас, учитывая FontMetrics и строку http://www.java2s.com/Code/Java/2D-Graphics-GUI/WrapstringaccordingtoFontMetrics.htm

Кто-то может прокомментировать, я уверен, что более поздние версии Java имеют дополнительные функции, связанные с этим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...