java绘图drawString位置的确定

Posted 追极

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java绘图drawString位置的确定相关的知识,希望对你有一定的参考价值。

根据api,很容易知道使用方式如下:

指定字符串和坐标即可。

但是简单认为字符串的起始位置就是左上顶点就错了,这样画起来每次的位置都不对,字体的大小不同,位置偏差很大。仔细看api注释后发现,y坐标是字符串基线位置的坐标,也就是说字符串基线与画布y重合。

字体的高由个元素组成:
ascent
descent

drawString中用的y坐标是指baseline的y坐标,即字体所在矩形的左上角y坐标+ascent



改进后的示例代码:
        BufferedImage srcBi = xxx;

        int owidth = srcBi.getWidth();
        int oheight = srcBi.getHeight();

        Graphics2D graphics = (Graphics2D)srcBi.getGraphics();
        graphics.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
        graphics.setColor(Color.BLUE);
        int fontSize = 50;
        Font font = new Font("楷体",Font.BOLD,fontSize);
        graphics.setFont(font);

        FontDesignMetrics metrics = FontDesignMetrics.getMetrics(font);


        //画字符串,x坐标即字符串左边位置,y坐标是指baseline的y坐标,即字体所在矩形的左上角y坐标+ascent
        graphics.drawString(DateUtil.formatDate(new java.util.Date(),DateUtil.FULL_TRADITION_PATTERN),10,10+metrics.getAscent()); //基线对齐改为顶边对齐

        String centerWords = "居中文字";
        int strWidth = metrics.stringWidth(centerWords);
        int strHeight = metrics.getHeight();
        int left = (owidth-strWidth)/2; //左边位置
        int top = (oheight-strHeight)/2+metrics.getAscent(); //顶边位置+上升距离(原本字体基线位置对准画布的y坐标导致字体偏上ascent距离,加上ascent后下移刚好顶边吻合)
        graphics.drawString(centerWords,left,top);

效果图

以上是关于java绘图drawString位置的确定的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Java 中居中 Graphics.drawString()?

JAVA中,drawstring 方法的用法,格式是啥啊

JAVA中,drawstring 方法的用法,格式是啥?

十一. 图形图像与多媒体2.设置字型和颜色

Java AWT Graphics更改drawString()的背景颜色[重复]

java语言或j2me的问题!在画布界面用一个drawString怎么实现自动换行?(就是文字很长,大于屏幕的宽时...