【问题标题】:Resizing Image object调整图像对象的大小
【发布时间】:2022-01-23 16:31:11
【问题描述】:

我创建 Image 和 Graphics2D 对象:

        image = createImage(width, height);
        buffer = (Graphics2D) image.getGraphics();

那么为什么这段代码不起作用:

image =image.getScaledInstance(width, height, Image.SCALE_SMOOTH);
buffer = (Graphics2D)  image.getGraphics();

它抛出:

线程“AWT-EventQueue-0”中的异常 java.lang.UnsupportedOperationException:getGraphics() 对使用 createImage(producer) 创建的图像无效 在 java.desktop/sun.awt.image.ToolkitImage.getGraphics(ToolkitImage.java:310)

我不确定我是否理解它,但似乎使用 createImage() 方法创建的 Image 对象和使用 getScaledInstance() 创建的 Image 对象不相等。是否有任何选项可以使用getScaledInstance() 仅调整image 的大小而不更改对象内的其他值,以便我可以调用getGraphics()

【问题讨论】:

  • 尝试使用BufferedImage 创建您的图像。如果您仍然有问题,请发布minimal reproducible example 来演示问题。
  • 另一种选择是在原始BufferedImage 上进行所有图像处理,并将缩放保存到Image 以供最后一步使用。

标签: java image awt image-scaling


【解决方案1】:

没有将Image 转换为BufferedImage 的标准方法。

此方法将进行转换。随意选择与TYPE_INT_RGB 不同的BufferedImage 类型。

public BufferedImage toBufferedImage(Image image) {
    if (image instanceof BufferedImage) {
        return (BufferedImage) image;
    }

    BufferedImage bi = new BufferedImage(image.getWidth(null), image.getHeight(null),
            BufferedImage.TYPE_INT_RGB);
    Graphics g = bi.getGraphics();
    g.drawImage(image, 0, 0, null);
    g.dispose();
    
    return bi;
}

【讨论】:

    猜你喜欢
    • 2021-09-10
    • 2011-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-10
    • 2011-10-24
    • 2010-11-20
    • 1970-01-01
    相关资源
    最近更新 更多