English 中文(简体)
Java Graphics Font - How to make sure the characters lie in particular area?
原标题:

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?

最佳回答
String msg = "(c)www.sanjaal.com";
int margin = 2;
g.drawString(msg, getWidth() - g.getFontMetrics().stringWidth(msg) - margin, strY);
问题回答

暂无回答




相关问题
Spring Properties File

Hi have this j2ee web application developed using spring framework. I have a problem with rendering mnessages in nihongo characters from the properties file. I tried converting the file to ascii using ...

Logging a global ID in multiple components

I have a system which contains multiple applications connected together using JMS and Spring Integration. Messages get sent along a chain of applications. [App A] -> [App B] -> [App C] We set a ...

Java Library Size

If I m given two Java Libraries in Jar format, 1 having no bells and whistles, and the other having lots of them that will mostly go unused.... my question is: How will the larger, mostly unused ...

How to get the Array Class for a given Class in Java?

I have a Class variable that holds a certain type and I need to get a variable that holds the corresponding array class. The best I could come up with is this: Class arrayOfFooClass = java.lang....

SQLite , Derby vs file system

I m working on a Java desktop application that reads and writes from/to different files. I think a better solution would be to replace the file system by a SQLite database. How hard is it to migrate ...

热门标签