我正在创建一个位图,它需要大约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。
但我想尽量减少它们,我已经访问了一个链接,并且我想按照中显示的选项进行更多缩放。但它使用解码诸如
BitmapFactory.decodeFile(??,options);
在那里我有没有文件从解码,我想把它从我创建位图解码并洗去最后创建位图,清除内存中的文件。
或者如果可以在创建时设置选项,以便我们可以避免额外的内存分配。
请帮忙。
我不完全理解你的问题。您正在使用Bitmap.createBitmap()创建位图,并*修复其宽度和高度*。那么你为什么要稍后调整呢?只需以较小的宽度和较小的高度直接创建它。 – natario
@mvai尽管你的问题清除了我有关位图的50%的观点,但我怎样才能在创建中设置选项?就像我可以在创建时设置位图的宽度和高度,但是如何通过配置设置选项 –
没有更多选项可以创建像这样的位图 - 宽度,高度和颜色配置。根据你想要对位图做什么,你可以使用颜色配置,使用更少的资源(例如尝试RGB_565,你将有更少的内存分配,但也更少的质量) – natario