Java中的ImageIO.write()不会更改值

时间:2017-05-13 09:58:24

标签: java

我正在尝试更改图像的一个像素的rgb值,然后将其写回到一个新文件中,但是当我读取之前已更改其值的文件时,我遇到了问题,它仍然具有旧值

这是我的代码:

    BufferedImage image = ImageIO.read(new File("input.jpg"));
    System.out.println(image.getRGB(0, 0) & 0xff);
    image.setRGB(0, 0, -2);
    System.out.println(image.getRGB(0, 0) & 0xff);
    ImageIO.write(image, "jpg", new File("output.jpg"));
    BufferedImage output = ImageIO.read(new File("output.jpg"));
    System.out.println(output.getRGB(0, 0) & 0xff);

我的代码的输出是:

    255
    254
    255

当我更改rgb值时应该是什么:

    255
    254
    254

1 个答案:

答案 0 :(得分:0)

在具有getRGB()的BufferedImage类中,返回默认RGB颜色模型(TYPE_INT_ARGB)和默认sRGB颜色空间中的整数像素。

TYPE_INT_ARGB是public static final in。它表示将8位RGBA颜色分量打包为整数像素的图像。该图像具有带alpha的DirectColorModel。此图像中的颜色数据被视为不与alpha预乘。

当此类型用作BufferedImage构造函数的imageType参数时,创建的图像与在JDK1.1及更早版本中创建的图像一致。

所以它每次都会返回255。

如果您有任何疑问,请告诉我们。

谢谢和问候,

Hardik Nai