如何使用Java默认库将图像转换为缓冲图像

时间:2019-05-30 00:39:42

标签: java image

我正在从事一个涉及模式检测的项目。我必须将输入图像缩放到特定大小并测试像素颜色。

我尝试输入java.awt.Image,以便可以调整其大小,然后将其转换为BufferedImage,以测试每个独立像素的RGB值。 但是,将BufferedImage强制转换为Image无效。

由于java.awt.Image无法访问每个像素的颜色值,因此我必须使用BufferedImage的.getRBG函数。但是,我必须接受一个java.awt.Image,因为BufferedImage无法调整大小。我做了一些有关调整BufferedImage大小的研究,但发现的所有结果都是关于在屏幕上调整其大小,而不是实际图像。我不是要在屏幕上显示BufferedImage,而是要访问图像上每个像素的颜色值。

以下是解决我的问题的方法: 请提出一种方法...

  • 缩放BufferedImage(不涉及在屏幕上绘制,只需调整BufferedImage本身的大小)

  • 访问java.awt.Image中像素的颜色值
Image img = ImageIO.read(inputFile).getScaledInstance(400, 400, 0);

BufferedImage scaledImage = (BufferedImage)img;

以下代码无法编译,因为BufferedImage无法转换为java.awt.Image

1 个答案:

答案 0 :(得分:0)

String imagePath = "path/to/your/image.jpg";
BufferedImage myPicture = ImageIO.read(new File(imagePath));

您可以使用ImageIO,请查看以下文档:Converting Image to BufferedImage

或者这个惊人的教程:https://www.baeldung.com/java-images 甚至是2012年的同样问题:Converting Image to BufferedImage

如果我答错了您的问题,请告诉我。

要调整图像大小,您可以尝试使用类似的方法:

public static BufferedImage resize(BufferedImage img, int newW, int newH) { 
    Image tmp = img.getScaledInstance(newW, newH, Image.SCALE_SMOOTH);
    BufferedImage dimg = new BufferedImage(newW, newH, BufferedImage.TYPE_INT_ARGB);

    Graphics2D g2d = dimg.createGraphics();
    g2d.drawImage(tmp, 0, 0, null);
    g2d.dispose();

    return dimg;
}  

此答案来自:Bufferedimage resize