在创建+缩放位图时,此过程是否需要太多RAM?

时间:2014-03-22 15:12:44

标签: android memory bitmap

我有一个" init"填充位图数组(a"缓存")内容的过程,从单个big,int数组中读取像素。 在保存每个图像之前,可能需要将图像大小调整为" target"尺寸。因此,我必须首先使用Bitmap.createBitmap创建完整大小的位图,然后使用Bitmap.createScaledBitmap将其保存在缓存中。

显然,我不想填补记忆,但它会发生"有时"在程序中。我错过了什么?我想知道在Bitmap.createBitmap功能之后是否实际删除了使用setImageCache创建的第一个位图。

for (int i = 0; i < array.length; i++) {
    setImageCache(i, Bitmap.createScaledBitmap(
            Bitmap.createBitmap(intArray, area * i, origW, origW, origH, Bitmap.Config.ARGB_8888), 
            targetW, targetH, true
    ));
}

1 个答案:

答案 0 :(得分:0)

只要您没有获得OutOfMemoryExceptions,一切都应该没问题,但您可以通过回收不需要的位图来改善您的代码:

for (int i = 0; i < array.length; i++) {
    Bitmap bitmap = Bitmap.createBitmap(intArray, area * i, origW, origW, origH, Bitmap.Config.ARGB_8888);
    Bitmap scaledBitmap = Bitmap.createScaledBitmap(bitmap, targetW, targetH, true);
    bitmap.recycle();
    setImageCache(i, scaledBitmap);
}

通过回收位图,您不需要释放那些不需要的位图占用的内存,这可以在处理大图像时显着抑制内存问题。