views:

261

answers:

1

I have an Image. On the bottom portion of the image, I would like to create a colored strip say, of height 100. I am already done with creating the strip and I can basically write strings in that portion (e.g. copyright of the image etc). The following is my method.

public static BufferedImage captionMyImage(BufferedImage sourceImage) {

 int height=sourceImage.getHeight();
 int width=sourceImage.getWidth();

 System.out.println("Image Height: "+height);
 System.out.println("Image Width: "+width);

 int min=20; //fifty pixels
 int newHeight=(int) (0.1*height>min ? 1.1*height : height+min);
 int difference=newHeight-height;
 System.out.println("new height:"+newHeight);
 System.out.println("Difference:"+difference);
 BufferedImage bgImage=new BufferedImage(width,newHeight,BufferedImage.TYPE_INT_RGB);



 /**Create a Graphics  from the background image**/
 Graphics2D g = bgImage.createGraphics();

 //g.drawRect(0, 0, width, ((int)0.1*height>min) ? (int)1.1*height : height+min);
 g.setColor(Color.RED);
 g.fillRect(0, 0, bgImage.getWidth(), bgImage.getHeight());
 g.setColor(Color.YELLOW);



 /**Set Antialias Rendering**/
 g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
   RenderingHints.VALUE_ANTIALIAS_ON);
 /**
  * Draw background image at location (0,0)
  * You can change the (x,y) value as required
  */
 g.drawImage(sourceImage, 0, 0, null);

 int strX=sourceImage.getWidth()/2;
 int strY=sourceImage.getHeight()+difference/2;
 System.out.println("X: "+strX);
 System.out.println("Y: "+strY);
 g.setFont(new Font(g.getFont().getName(),Font.PLAIN,20));
 g.drawString("(c)www.sanjaal.com",strX ,strY);

 g.dispose();

 return bgImage;
}

I know the way I have calculated the values for x and y for drawString() method is just a simple one and has problem that the text goes outside the boundary sometimes (depending on image size and text length)

I would like to make sure that the text in the image on the bottom strip that I have defined always aligns to the right portion (boundary) of the image, but does not go out of boundary. How can I achieve that? Remember the text length can be dynamic.

Would the java Graphics experts out there share your ideas on how this can be achieved?

+2  A: 
String msg = "(c)www.sanjaal.com";
int margin = 2;
g.drawString(msg, getWidth() - g.getFontMetrics().stringWidth(msg) - margin, strY);
Jonathan Feinberg
Thank you for a quick reply. This is exactly what I am looking for.
Kushal Paudyal