2014-10-02 2 views
1

Я прошел через множество учебников и, наконец, получил изображение Водяные знаки с логотипом и текстом вместе, но проблема в том, что мой текст не отображается по горизонтали к изображению, но текст начинается с самого центра.Почему мой водяной знак не отображается в центре в java?

Вот мой код

BufferedImage waterMark = ImageIO.read(getClass().getResource("/haams/MyLogo.png")); 
BufferedImage image = ImageIO.read(new File(MyImage.getAbsolutePath())); 
Graphics2D g = image.createGraphics(); 
try 
{ 
    g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5f));// 50% transp 
    g.drawImage(waterMark, image.getWidth() - waterMark.getWidth(), image.getHeight() - waterMark.getHeight(), null);// draw in lower right corner 

    FontMetrics fontMetrics = g.getFontMetrics(); 
    Rectangle2D rect = fontMetrics.getStringBounds("Testing WaterMark", g); 

    g.setFont(new Font("Arial", Font.BOLD, 30)); 
    g.drawString("Testing WaterMark",(image.getWidth() - (int) rect.getWidth())/2, (image.getHeight() - (int) rect.getHeight())/2); 
    //Above line should place my String in center but the text starts from center 
} 
finally 
{ 
    g.dispose(); 
} 
ImageIO.write(image, FileName.substring(FileName.lastIndexOf('.')+1), new File(System.getProperty("user.dir")+"\\"+FileName)); 

В моем выходе MyLogo правильно установлен, где я хочу быть, но Text начинается от центра вместо того, чтобы быть в центре.

У меня нет 10 очков, чтобы загрузить изображение, поэтому я хотел бы попробовать все возможное, чтобы проиллюстрировать, что я имею в виду

Мой Изображение и текст внутри него

----------------------------------- 
|         | 
|         | 
|         | 
|         | 
|         | 
|    Test WaterMark | 
|         | 
|         | 
|         | 
|         | 
|         | 
----------------------------------- 

Вы можете увидеть, что текст начинается от центра, а не от центра. Что случилось в моем коде?

+1

Что произойдет, если вы установите шрифт на графике, прежде чем вы получите границы строк? Я думаю, что вы делаете расчет для позиции с другим шрифтом –

+0

@ToonBorgers то же самое :( –

ответ

0

На мой взгляд, проблема может быть, что вы делаете

FontMetrics fontMetrics = g.getFontMetrics(); 

, прежде чем установить шрифт вы хотите использовать

g.setFont(new Font("Arial", Font.BOLD, 30)); 

Убедитесь, чтобы установить шрифт первого и получить метрики после установка шрифта.

+0

Wonderfull Catch man, Excellent Man. Спасибо большое. Это решило. –

+0

Я приму свой ответ, как только это произойдет с 10 минутами. –

Смежные вопросы