如何将缓冲图像转换为图像,反之亦然?

2022-09-01 19:54:47

实际上,我正在开发图像编辑软件,现在我想转换缓冲图像,即:

  BufferedImage buffer = ImageIO.read(new File(file));

到图像,即格式如下:

  Image image  = ImageIO.read(new File(file));

有可能吗??如果是,那么如何??


答案 1

BufferedImage是一个(n)Image,因此您在第二行中执行的隐式转换可以直接编译。如果您知道图像实际上是缓冲图像,则必须像这样明确地投射它:

Image image = ImageIO.read(new File(file));
BufferedImage buffered = (BufferedImage) image;

由于 BufferedImage 扩展了 Image,因此它可以放入 Image 容器中。但是,任何图像都可以容纳在那里,包括那些不是BufferedImage的图像,因此,如果类型不匹配,您可能会在运行时获得ClassCastException,因为BufferedImage不能容纳任何其他类型,除非它扩展BufferedImage。


答案 2

示例:假设您有一个要缩放的“图像”,则可能需要缓冲图像,并且可能仅从“图像”对象开始。所以我认为这有效...AVATAR_SIZE是我们希望图像成为的目标宽度:

Image imgData = image.getScaledInstance(Constants.AVATAR_SIZE, -1, Image.SCALE_SMOOTH);     

BufferedImage bufferedImage = new BufferedImage(imgData.getWidth(null), imgData.getHeight(null), BufferedImage.TYPE_INT_RGB);

bufferedImage.getGraphics().drawImage(imgData, 0, 0, null);

推荐