【发布时间】:2015-11-02 09:28:31
【问题描述】:
我正在创建一个位图,它在堆中大约需要 11 mb,尽管它的尺寸很小。好吧,我想知道我是否可以创建位图并同时对其进行缩放。我想这样做的原因是,内存分配,好像我从这里发布的不同位图问题中正确理解,那就是
位图在创建时分配内存
所以如果是,那么再次缩放它需要一些处理时间并且还会增加堆大小,直到并且除非没有发生垃圾回收
所以我正在做的是
screenHeight = displaymetrics.heightPixels;
screenWidth = displaymetrics.widthPixels;
float aspectRatio = screenWidth / screenHeight;
int modifiedScreenHeight = 400;
int modifiedScreenWidth = (int) (modifiedScreenHeight * aspectRatio);
mBitmap = Bitmap.createBitmap(modifiedScreenWidth, modifiedScreenHeight, Bitmap.Config.ARGB_8888);
所以现在它正在创建位图并分配内存,通过 android studio 中的内存分析器工具,我可以看到它在内存中占用了 11mb。
但我想最小化它们,我访问了一个链接,我想通过选项进行更多缩放,如video 所示。但它使用文件来解码,例如
BitmapFactory.decodeFile(??,options);
由于我没有要解码的文件,我想从我创建的位图中对其进行解码,并洗掉最后创建的位图以清除内存。
或者是否可以在创建时设置选项,以避免额外的内存分配。
请帮忙。
【问题讨论】:
-
我不完全理解你的问题。您正在使用 Bitmap.createBitmap() 创建位图,并固定其宽度和高度。那你为什么要在以后缩小它呢?直接用更小的宽度和更少的高度创建它。
-
@mvai 虽然你的问题清除了我关于位图的 50% 的看法,但我如何在创作中设置选项?就像我可以在创建时设置位图的宽度和高度,但是如何使用配置设置选项
-
这样创建的位图没有更多选项 - 宽度、高度和颜色配置。根据您想对该位图执行的操作,您可以使用使用较少资源的颜色配置(例如,尝试 RGB_565,您将分配更少的内存,但质量也会降低)
标签: android android-bitmap bitmapfactory