Android Emulator:java.lang.OutOfMemory操作位图时出错

Android Emulator:java.lang.OutOfMemory操作位图时出错,android,out-of-memory,image,Android,Out Of Memory,Image,我有一个处理位图的例程,将RGB格式转换为灰度 它通常工作正常,但当我尝试在大小为1088kb的位图上使用它时,会出现以下错误: java.lang.OutOfMemoryError 我正在使用模拟器。1088kb不是一个很大的图像,它怎么会耗尽内存 确切地说,调用有问题代码的应用程序在后堆栈上包含另一个活动,该活动具有图片缩略图的ListView 方法如下: public Bitmap toGrayscale(Bitmap bmpOriginal) { int wid

我有一个处理位图的例程,将RGB格式转换为灰度

它通常工作正常,但当我尝试在大小为1088kb的位图上使用它时,会出现以下错误:

java.lang.OutOfMemoryError
我正在使用模拟器。1088kb不是一个很大的图像,它怎么会耗尽内存

确切地说,调用有问题代码的应用程序在后堆栈上包含另一个活动,该活动具有图片缩略图的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;
}

您在内存中管理位图的效率非常低,并且可能存在内存泄漏(在处理完位图后没有将其从内存中释放出来,或者将其保留在未进行垃圾收集的活动中)。Android开发者有一个适当的位图管理页面:

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

监视模拟器上的堆大小:

清除内存泄漏:


您在内存中管理位图的效率非常低,并且可能存在内存泄漏(没有在处理完位图后从内存中释放位图,或者将其保留在未进行垃圾收集的活动中)。Android开发者有一个适当的位图管理页面:

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

监视模拟器上的堆大小:

清除内存泄漏:


位图大小为1088 kB或PNG文件?您需要.recycle()位图当您不使用它时,也许您可以回收“原件”并保留灰度memory@PaNaVTEC请问我该怎么做?只需在位图上调用recycle()?谢谢位图大小为1088 kB或PNG文件?您需要.recycle()位图,当您不使用它时,也许您可以回收“原始”并保留灰度memory@PaNaVTEC请问我该怎么做?只需在位图上调用recycle()?谢谢