Android Emulator:操作位图时的java.lang.OutOfMemoryError

时间:2013-02-14 15:01:28

标签: android out-of-memory image

我有一个例程,它操纵一个Bitmap将RGB格式转换为灰度。

它通常工作正常,但是当我尝试在大小为1088kb的Bitmap上使用它时,它会给我这个错误:

java.lang.OutOfMemoryError

我正在使用模拟器。 1088kb不是一幅很大的画面,怎么会耗尽内存呢?

确切地说,调用有问题代码的应用程序包括后备堆栈上的另一个Activity,它具有ListView的图片缩略图。

这是方法:

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;
}

1 个答案:

答案 0 :(得分: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?