代码之家  ›  专栏  ›  技术社区  ›  Kushal Paudyal

Java图形字体-如何确保字符位于特定区域?

  •  1
  • Kushal Paudyal  · 技术社区  · 16 年前

    我有一个图像。在图像的底部,我想创建一个彩色条带,比如说,高100。我已经完成了创建条带的工作,基本上可以在该部分中编写字符串(例如图像的版权等)。以下是我的方法。

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

    我知道我计算drawstring()方法的x和y值的方法很简单,并且有时会遇到文本超出边界的问题(取决于图像大小和文本长度)。

    我想确保我定义的底部条带上图像中的文本始终与图像的右侧部分(边界)对齐,但不会超出边界。我怎样才能做到?记住,文本长度可以是动态的。

    Java图形专家会分享你的想法吗?

    1 回复  |  直到 16 年前
        1
  •  4
  •   Jonathan Feinberg    16 年前
    String msg = "(c)www.sanjaal.com";
    int margin = 2;
    g.drawString(msg, getWidth() - g.getFontMetrics().stringWidth(msg) - margin, strY);
    
    推荐文章