首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java AffineTransform让drawString消失

Java AffineTransform让drawString消失
EN

Stack Overflow用户
提问于 2015-12-14 02:55:19
回答 1查看 189关注 0票数 0

这太奇怪了。当我创建一个BufferedImage,并且不更改Graphics2D.transform()时,我可以毫无问题地绘制一条直线和文本。

当我设置转换时(我将用户空间设置为使用EMU而不是像素),然后我可以使用EMU坐标绘制直线,但不能绘制文本。

代码如下:

代码语言:javascript
复制
public void testBitmaps2() throws Exception {

        // no scaling
        BufferedImage image = new BufferedImage(300, 300, BufferedImage.TYPE_INT_ARGB);
        Graphics2D graphics = image.createGraphics();
        graphics.setBackground(new Color(0x00FFFFFF, true));
        graphics.clearRect(0, 0, 300, 300);
        graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        graphics.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);

        java.awt.Font javaFont = new java.awt.Font("Arial", java.awt.Font.PLAIN, 24);
        graphics.setFont(javaFont);
        graphics.setColor(Color.BLACK);

        graphics.setStroke(new BasicStroke(1));
        graphics.draw(new Line2D.Float(100, 150, 200, 150));
        graphics.drawString("hi there", 100, 150);
        ImageIO.write(image, "png", new File("c:/temp/", "no_scaling.png"));


        // scaling
        image = new BufferedImage(300, 300, BufferedImage.TYPE_INT_ARGB);
        graphics = image.createGraphics();

        // scale to use EMUs, assuming 300DPI image
        AffineTransform scaleToEmus = AffineTransform.getScaleInstance(300f / 914400f, 300f / 914400f);
        graphics.transform(scaleToEmus);

        graphics.setBackground(new Color(0x00FFFFFF, true));
        graphics.clearRect(0, 0, 914400, 914400);
        graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        graphics.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);

        javaFont = new java.awt.Font("Arial", java.awt.Font.PLAIN, 24);
        graphics.setFont(javaFont);
        graphics.setColor(Color.BLACK);

        graphics.setStroke(new BasicStroke(914400 / 300));
        graphics.draw(new Line2D.Float(914400 / 3, 914400 / 2, 914400 * 0.666f, 914400 / 2));
        graphics.drawString("hi there", 914400 / 3, 914400 / 2);
        ImageIO.write(image, "png", new File("c:/temp/", "scaling.png"));
    }
EN

回答 1

Stack Overflow用户

发布于 2015-12-14 03:00:01

好了,javadoc是错的!The docs say

大小-字体的磅大小

但是,您需要将其放大以匹配变换缩放。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34254980

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档