2014-06-19 116 views
0

我正在使用以下代碼放大圖像。在Android中避免Bitmap.createScaledBitmap的OutOfMemoryError

bmp=new BitmapFactory().decodeFile(util.getPathFromUri(tempFile)); 
Bitmap scaledBitmap=Bitmap.createScaledBitmap(bmp, newWidth, newHeight, true); //Line 2 
ByteArrayOutputStream bos=new ByteArrayOutputStream(); 
scaledBitmap.compress(CompressFormat.JPEG, 100, bos); 
bmp.recycle(); 
bmp=null; 
OutputStream out; 
out = new FileOutputStream(util.getTempFileName()); 
bos.writeTo(out); 
bos.flush(); 

但有時在的OutOfMemoryError 2號線的應用程序崩潰時,我試圖封閉的try-catch中的代碼但是我的應用程序崩潰是唯一的例外是通過的try-catch抓住,也createScaledBitmap()功能只拋出IllegalArgumentException。 因爲我不想顯示圖像,所以我不需要將其縮小(正如我在SOF中的其他問題中看到的那樣)。 那麼,如果我使用那個(newWidth,newHeight),我該如何預先檢測出現OutOfMemoryError。有沒有什麼方法可以計算內存中(newWidth,newHeight)的位圖所需的字節數以及可以分配給位圖的最大可用內存?

請幫忙!

回答

0
BitmapFactory.Options options = new BitmapFactory.Options(); 
options.inPreferredConfig = Config.RGB_565; 
options.inPurgeable = true; 
options.inSampleSize = 1; 
options.inScaled = false; 
options.inDensity = DisplayMetrics.DENSITY_DEFAULT; 
options.inTargetDensity = DisplayMetrics.DENSITY_DEFAULT; 
options.inScreenDensity = DisplayMetrics.DENSITY_DEFAULT; 
new BitmapFactory().decodeFile(util.getPathFromUri(tempFile),options); 
+0

直到現在解碼功能工作正常。我在createScaledBitmap()函數中出錯。如何避免這種情況? – prodev

0

爲了避免java.lang.OutOfMemory例外,對其進行解碼,除非你絕對信任來源爲您提供了可用內存內舒適適合預見的大小的圖像數據之前檢查的位圖的尺寸。欲瞭解更多詳情,請參見this

+0

我已閱讀文檔,但沒有幫助我。 – prodev

0

試試這個方法來調整你的位圖:

位圖bitmpResizeResult = ThumbnailUtils.extractThumbnail(bitmapWantToResize,寬,高);

希望得到這個幫助!

相關問題