java - 无法从源输入生成相同的输出图像

标签 java image awt

我正在读取一个 .jpg 文件作为整数数组(源)并尝试从相同的数据生成一个新图像,但代码生成了一个黑色图像。但它应该生成重复图像作为源。

        String srcName = "input.jpg";
        File srcFile = new File(srcName);
        BufferedImage image = ImageIO.read(srcFile);
        System.out.println("Source image: " + srcName);


        int w = image.getWidth();
        int h = image.getHeight();
        int[] src = image.getRGB(0, 0, w, h, null, 0, w);

        System.out.println("Array size is " + src.length);


        BufferedImage dstImage = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
        // generating destination image with same source array
        dstImage.setRGB(0, 0, w, h, src, 0, w);

        String dstName = "output.jpg";
        File dstFile = new File(dstName);
        ImageIO.write(dstImage, "jpg", dstFile);
        System.out.println("Output image: " + dstName);

最佳答案

您需要为两个图像使用相同的颜色编码类型。 您的输入图像可能未编码为 BufferedImage.TYPE_INT_ARGB

这为我的测试图像修复了它,它的类型为 BufferedImage.TYPE_3BYTE_BGR:

BufferedImage dstImage = new BufferedImage(w, h, image.getType());

但是,我不希望新写入的图像与输入完全相同。我宁愿 ImageIO 在将图像数据编码为 jpg 时引入一些伪像。

关于java - 无法从源输入生成相同的输出图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35652305/

相关文章:

javascript - 调整图像大小以适应 Div 的限制

java - AffineTransform() 旋转矩形的速度太快

java - 使用 Java Polygons 进行反射和其他转换

java - 如何在对象java中获取注解

java - Gradle 包装器标签不匹配错误

java - 同时部署到多个 AVD

java - 如何删除jtable中的所有行?

java - 选中复选框时启用文本框

Java图像缩放

image - Flutter 如何将图像文件保存到图库中的新文件夹?