2012-10-18 70 views
2

目前我正在使用compress方法將android手機上的相機硬件拍攝的圖像保存到SD卡。android更好的保存圖像選項?

try { 
BitmapFactory.Options options=new BitmapFactory.Options(); 
options.inSampleSize = 10; 
Bitmap myImage = BitmapFactory.decodeByteArray(imageData, 0, 
imageData.length,options); 

fileOutputStream = new FileOutputStream(
sdImageMainDirectory.toString() +"/"+fileName+".png"); 

BufferedOutputStream bos = new BufferedOutputStream(
fileOutputStream); 
myImage.compress(CompressFormat.PNG, 100, bos); 
bos.flush(); 
bos.close(); 

現在這個工作非常好,但是,它保存的圖像的質量幾乎不值得把圖片放在第一位。我正在尋找更好的方式來以更高的質量保存圖片。

+0

你確定原始圖片質量好嗎? – Blackbelt

+1

將其另存爲PNG ..您正在將圖像壓縮爲完全容量..即100%..嘗試較小的值.. – Ronnie

+0

@blackbelt:該應用程序正在使用droid手機上的相機硬件拍攝照片。所以是的原始圖片質量很好。 –

回答

2
options.inSampleSize = 10; 

這裏是你的質量損失:這將在heigthwidth

創建的1/10圖像從DOC:

如果設置的值> 1,請求解碼器對原始的 圖像進行二次採樣,返回一個較小的圖像以節省內存。樣本大小爲在任一維度中對應於解碼位圖中的單個像素的像素數量的 。例如,inSampleSize == 4將返回一個 圖像,該圖像是原始寬度/高度的1/4,以及1/16像素數。任何值< = 1的處理方式與1相同。注意: 解碼器將嘗試完成此請求,但生成的位圖可能具有不同的尺寸,這與請求的尺寸完全不同。 此外,2的冪通常更快/更容易解碼器兌現。

+0

謝謝。新的一套眼睛有幫助,我想我誤解了SampleSize正在做什麼。認爲像壓縮質量更高的數字更好..但我錯了:P –

+0

不客氣。 – Blackbelt