【发布时间】:2013-01-30 10:11:54
【问题描述】:
我有一个例程操作位图以将 RGB 转换为灰度。
它通常工作正常,但是当我尝试在大小为 1088kb 的位图上使用它时,它给了我这个错误:
java.lang.OutOfMemoryError
我正在使用模拟器。 1088kb不是很大的图,怎么会耗尽内存呢?
确切地说,调用有问题代码的应用程序在后台堆栈中包含另一个 Activity,该 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;
}
【问题讨论】:
-
位图大小是 1088 kB 还是 PNG 文件?
-
不使用的时候需要.recycle() 位图,或许可以回收“原件”并在内存中保留灰度
-
@PaNaVTEC 请问我该怎么做?只需在 Bitmap 上调用 recycle()?谢谢!!!!
标签: android out-of-memory image