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());
}
}
所以在上面的陣列one
和two
被保持的值的例子是不同的。
我在猜測有不同類型的檢索和恢復圖像?我試圖找出整天發生的事情,但沒有運氣。任何幫助讚賞。
聽起來像JPEG壓縮只是稍微調整了存儲它時的值。 –
jpeg是一種有損格式,它在保存時會丟失一些顏色信息。只用它作爲一次寫入格式 – Ferrybig
@Ferrybig我認爲你的意思是有損。 –