【问题标题】:How to convert an image to buffered image using java default libraries如何使用 java 默认库将图像转换为缓冲图像
【发布时间】:2019-05-30 00:39:41
【问题描述】:

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

我尝试接收 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

【问题讨论】:

    标签: java image


    【解决方案1】:
    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

    【讨论】:

    • 我已经将图像读入 java.awt.Image 变量。我需要将此已读取的图像转换为 BufferedImage,以便我可以访问每个单独的像素。或者我只需要一种方法来调整 BufferedImage 文件的大小。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多