2012-10-27 59 views
1

我使用我的Android相機捕捉圖像,但相機是8MP,所以我得到4-5MB的JPEG圖像。所以,我試圖使用下面的代碼將它們壓縮到1 MB。如何在Android中將捕獲的圖像壓縮到特定尺寸?

數據包含JPEGBAOSByteArrayOutputStream類型的圖像。

while (data.length > 1 * 1024 * 1024) 
{ 
    System.gc(); 
    Log.e(TAG,"Data size "+ (data.length/1024)); 
    bitmapData.compress(CompressFormat.JPEG, compressionRatio, baos); 
    data = baos.toByteArray(); 
    Log.e(TAG,"Data size "+ (data.length/1024)); 
    compressionRatio -= 5 ; 
} 

它讓我捕捉到一些圖像,但後幾個圖片,應用程序崩潰,錯誤日誌Out of memory。 任何人都可以提供更好的解決方案來壓縮JPEG。

三江源

+2

http://stackoverflow.com/questions/4943016/android-how-到壓縮 - 或縮小 - 的圖像。 – Raghunandan

+0

http://stackoverflow.com/questions/6265008/how-to-reduce-large-image-size-to-thumbnail-size-in-android – juned

+0

只是使用FileOutputStream out = new FileOutputStream(file); \t \t \t \t \t bm.compress(Bitmap.CompressFormat.JPEG,90,out); –

回答

0

與您所提供的解決方案的問題是,位圖分配所有的內存。你需要做的是將這個添加到循環的最後。

bitmapData.recycle(); 
System.gc(); 

這將位圖標記爲已停用並準備好進行垃圾收集,並手動調用垃圾回收器。

0

老問題,但我希望這有助於somebody.Adding這個代碼開始循環將重置byteArrayOutputStream(BAOS):

baos.reset(); 
相關問題