2013-02-14 102 views
0

我有一個例程,操縱一個位圖將表單RGB轉換爲灰度。Android模擬器:java.lang.OutOfMemoryError當操縱位圖

它工作正常,通常情況下,但是當我嘗試使用它在一個位圖是1088kb大小它給了我這個錯誤:

java.lang.OutOfMemoryError 

我使用的模擬器。 1088kb不是一個很大的圖片,它怎麼會耗盡內存?

確切地說,確實調用有問題的代碼的應用程序包括具有圖片縮略圖ListView的後備棧上的另一個Activity。

這是方法:

public Bitmap toGrayscale(Bitmap bmpOriginal) 
{   
    int width, height; 
    height = bmpOriginal.getHeight(); 
    width = bmpOriginal.getWidth();  

    Bitmap bmpGrayscale = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565); 
    Canvas c = new Canvas(bmpGrayscale); 
    Paint paint = new Paint(); 
    ColorMatrix cm = new ColorMatrix(); 
    cm.setSaturation(0); 
    ColorMatrixColorFilter f = new ColorMatrixColorFilter(cm); 
    paint.setColorFilter(f); 
    c.drawBitmap(bmpOriginal, 0, 0, paint); 
    return bmpGrayscale; 
} 
+2

位圖大小是1088 kB或PNG文件? – Selvin 2013-02-14 15:07:16

+1

你需要.recycle()位圖,當你沒有使用它,也許你可以回收「原件」,並保持灰度在內存 – PaNaVTEC 2013-02-14 15:13:41

+0

@PaNaVTEC請問我該怎麼做?只需在位圖上調用recycle()即可?謝謝!!!! – 2013-02-14 15:22:02

回答

3

您現在的位置在內存管理的位圖非常低效的,你可能有內存泄漏(當你與他們做了不釋放從內存位圖或留存記錄,不收集垃圾的活動)。 Android開發者有適當的區域管理頁面:

http://developer.android.com/training/displaying-bitmaps/index.html

您可以嘗試在你的模擬器增加堆大小。

Out of memory error on android emulator, but not on device

監控您模擬器堆大小:

https://stackoverflow.com/a/7427803/445131

擺脫你的內存泄漏:

What Android tools and methods work best to find memory/resource leaks?