2017-05-13 42 views
0

我試圖更改圖像的一個像素的rgb值,然後將其寫回到新文件中,但在讀取文件時遇到問題我以前改變了它的價值,它仍然具有舊的價值。值不會隨Java中的ImageIO.write()變化

這裏是我的代碼:

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 
+2

你要保存爲JPEG格式,這是一種有損格式的圖像。它不能保證所有像素的值都完全保留。使用非有損格式,例如PNG。 – Jesper

+0

@Jesper非常感謝你,它的工作:) – sasorihuriko

回答

0

在BufferedImage類getRGB()返回默認RGB顏色模型(TYPE_INT_ARGB)和默認sRGB顏色空間中的整數像素。

TYPE_INT_ARGB是公共靜態最終英寸它代表一個圖像與8位RGBA顏色分量打包成整數像素。該圖像具有帶alpha的DirectColorModel。該圖像中的顏色數據被認爲不是預乘alpha。

將此類型用作BufferedImage構造函數的imageType參數時,創建的圖像與在JDK1.1及更早版本中創建的圖像一致。

所以每次返回255

讓我們知道,如果您有任何疑問。

感謝和問候,

Hardik奈