2012-02-08 36 views
1

我正在通過BitmapFactory加載jpeg文件並嘗試再次保存它(後來我想在再次保存它之前對像素數據進行一些計算)。在Android中保存JPEG文件,不丟失像素信息

但是,如果我試圖把它與

FileOutputStream fos = new FileOutputStream(new File("/sdcard/test.jpg")); 
originalImage.compress(Bitmap.CompressFormat.JPEG, 100, fos); 

保存那麼它是不完全一樣的結果作爲原始圖片。某些像素具有不同的顏色值,這對我以後的計算沒有用。

是否有可能安全無損?或者是我在加載圖片時出現問題

Bitmap originalImage = BitmapFactory.decodeFile("/sdcard/input.jpg"); 

之前幾行?

回答

5

有沒有可能安全無損?

否。JPEG格式使用有損壓縮。這是沒有正規擔保的,即使你設置的質量爲100

或者是問題已經當我加載與圖片[...]

沒有,位圖.. 。位圖,即它們表示圖像數據的確切位。

+0

好吧,但是當我在一個普通的項目中用Java進行嘗試時,我會用'BufferedImage originalImage = ImageIO.read(new File(「input.jpg」))來做到這一點。 ImageIO.write(originalImage,「jpg」,new File(「test.jpg」));'這將無損。可悲的是,Android不支持ImageIO,但是沒有辦法像這樣做嗎? – Steve 2012-02-08 15:18:46

+1

如果您不希望像素值發生變化,請使用像PNG這樣的無損壓縮 – BitBank 2012-02-08 15:22:53

+0

不幸的是,並不能保證* x = compressJpeg(decompressJpeg(x))*適用於所有* x *。 (對* x *的一些值和一些jpeg-algoritms,它*可能顯然是這種情況,但不應該依賴它。)正如BitBank所說,使用PNG(或BMP)進行無損圖像存儲。 – aioobe 2012-02-08 15:58:10