Android模拟器:java.lang.OutOfMemoryError当操纵位图

问题描述:

我有一个例程,操纵一个位图将表单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

您现在的位置在内存管理的位图非常低效的,你可能有内存泄漏(当你与他们做了不释放从内存位图或留存记录,不收集垃圾的活动)。 Android开发者有适当的区域管理页面:

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

您可以尝试在你的模拟器增加堆大小。

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

监控您模拟器堆大小:

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

摆脱你的内存泄漏:

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