2016-02-07 11 views
0

我試圖檢索一個JPG圖像作爲BufferedImage,然後將其分解成一個3D數組[RED][GREEN][BLUE],然後將其重新轉換爲BufferedImage並將其存儲在不同的文件名下。對我來說都很好,但是,當我嘗試使用創建的新文件重新加載3D陣列時,我得到了RGB的不同值,儘管新圖像肉眼看起來很不錯。我做了以下。爲什麼在檢索時修改了JPG? - Java

BufferedImage bi = ImageIO.read(new File("old.jpg")); 
int[][][] one = getArray(bi); 
save("kite.jpg", one); 

BufferedImage bi2 = ImageIO.read(new File("new.jpg")); 
int[][][] two = getArray(bi2); 

private void save(String destination, int[][][] in) { 
    try { 
    BufferedImage out = new BufferedImage(in.length, in[0].length, BufferedImage.TYPE_3BYTE_BGR); 

     for (int x=0; x<out.getWidth(); x++) { 
      for (int y = 0; y < out.getHeight(); y++) { 
       out.setRGB(x, y, new Color(in[x][y][0], in[x][y][1], in[x][y][2]).getRGB()); 
      } 
     } 

     File f = new File("name"); 
     ImageIO.write(out, "JPEG", f); 
    } catch (IOException e) { 
     System.out.println(e.getMessage()); 
    } 

} 

所以在上面的陣列onetwo被保持的值的例子是不同的。

我在猜測有不同類型的檢索和恢復圖像?我試圖找出整天發生的事情,但沒有運氣。任何幫助讚賞。

+0

聽起來像JPEG壓縮只是稍微調整了存儲它時的值。 –

+1

jpeg是一種有損格式,它在保存時會丟失一些顏色信息。只用它作爲一次寫入格式 – Ferrybig

+0

@Ferrybig我認爲你的意思是有損。 –

回答

0

相當簡單:

JPEG是有損壓縮的數字圖像

(從wikipedia)一個常用的方法。 每次壓縮圖像時,都會更改圖像以減小文件大小。事實上,重複幾百次的解壓縮和壓縮步驟會將圖像更改爲大多數情況下整個圖像變爲純灰色區域的點。有一些按鍵無損失,但大多數操作模式會改變圖像。

相關問題