【发布时间】:2014-02-09 16:15:12
【问题描述】:
我在 HorizontalScrollView 中有一个 RelativeLayout,对象是捕获整个视图(比屏幕宽)。这是我使用的:
thelayout = (RelativeLayout) findViewById(R.id.thelayout);
bitmap = Bitmap.createBitmap(thelayout.getWidth(), thelayout.getHeight(), Config.ARGB_8888);
Canvas c = new Canvas(bitmap);
thelayout.draw(c);
然后我显示位图,一切都很好,除非 RelativeLayout 有很多小部件,然后我在 Bitmap.createBitmap 上收到 OutOfMemoryError。
在正常情况下,我们可以在使用位图之前调整它的大小或压缩它,例如当图像来自文件系统或相机时,使用 Bitmap.createScaledBitmap 和 BitmapFactory.Options。
但是由于 createBitmap 的尺寸必须是 HorizontalScrollView 内的 RelativeLayout 以确保我捕获整个屏幕,我找不到任何东西来克服 OutOfMemoryError。
有什么想法吗?
更新
我更改为 RGB_565 但仍然是同样的问题。记录猫报告
02-12 10:11:10.897: E/AndroidRuntime(22958): java.lang.OutOfMemoryError: bitmap size exceeds VM budget(Heap Size=17927KB, Allocated=13569KB, Bitmap Size=1046KB)
但是,如果我从堆大小中取出分配,我剩下 4358。但位图大小是 1046,所以它不应该工作,还是我没有正确解释日志?
【问题讨论】:
-
你试过用
Config.RGB_565代替Config.ARGB_8888吗?这将使位图的内存需求减半。 -
不知道,我试试看。我认为这会以某种方式降低位图?
-
降级是一个强词 :) 它会降低可用的颜色范围,所以是的,它会对图像的视觉质量产生影响。然而,它不会在图像中引入任何类型的伪影或模糊。唯一会高度可见的真实区域是平滑渐变 - 在 16 位颜色下会变得不那么平滑。
标签: android bitmap out-of-memory horizontalscrollview