首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么当我将图像放在可绘制文件夹中时,BitmapFactory.decodeResource()要慢一些?

为什么当我将图像放在可绘制文件夹中时,BitmapFactory.decodeResource()要慢一些?
EN

Stack Overflow用户
提问于 2015-08-03 07:30:51
回答 1查看 667关注 0票数 2

我刚刚注意到,在检查一些资源映像的解码时间时,当我将资源图像移动到BitmapFactory.decodeResource()文件夹时,drawable函数的速度大约慢了3-6倍。

问题:

有人知道为什么会这样吗?即使图像在drawable文件夹中,它们是否也是缩放的?在不将图像副本存储在每个文件夹中的情况下,是否可以防止这种情况发生?

详细信息:

我使用下面的代码来检查图像的解码时间。

代码语言:javascript
复制
for(int i = 0; i < 5; i++){
    long time = System.currentTimeMillis();
    BitmapFactory.decodeResource(getResources(),R.drawable.welcome_01);
    Log.i(TAG, "Time: " + (System.currentTimeMillis() - time));
}

位图大小: 774 x 1280

设备: Nexus 6(如果资源可用的话,它使用drawable xxxhdpi文件夹)

测试结果:

如果图像位于drawable文件夹中,则为解码时间:

代码语言:javascript
复制
08-03 09:18:01.072: I/MainActivity(26242): Time: 298
08-03 09:18:01.352: I/MainActivity(26242): Time: 280
08-03 09:18:01.656: I/MainActivity(26242): Time: 304
08-03 09:18:01.929: I/MainActivity(26242): Time: 272
08-03 09:18:02.263: I/MainActivity(26242): Time: 334

如果它们位于drawable-xxxhdpi文件夹中,以下是结果:

代码语言:javascript
复制
08-03 09:19:49.733: I/MainActivity(26456): Time: 54
08-03 09:19:49.786: I/MainActivity(26456): Time: 53
08-03 09:19:49.841: I/MainActivity(26456): Time: 54
08-03 09:19:49.905: I/MainActivity(26456): Time: 64
08-03 09:19:49.966: I/MainActivity(26456): Time: 61
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-03 09:47:25

我找到了解决问题的办法。

可能会对别人有帮助。

解决方案:

将图像放入drawable-nodpi文件夹可以防止缩放图像。

附加信息:

在每个其他文件夹中,图像在本例中都是缩放的,甚至在drawable文件夹中也是如此。

在解码不同文件夹中的资源后,我检查了位图大小。

原始尺寸774x1280

代码语言:javascript
复制
drawable folder: Bitmap: 2709x4480
drawable-ldpi :  Bitmap: 3612x5973
drawable-mdpi: Bitmap: 2709x4480
drawable-hdpi:  Bitmap: 1806x2987
drawable-xhdpi:  Bitmap: 1355x2240
drawable-xxhdpi: Bitmap: 903x1493
drawable-xxxhdpi: Bitmap: 677x1120
drawable-nodpi:  Bitmap: 774x1280

多亏了郑祖儿,我找到了这个问题的官方答案。在android开发者页面上,您可以阅读以下几行:

如果资源在正确的密度中不可用,系统将加载默认资源,并根据需要将它们向上或向下缩放,以匹配当前屏幕的密度。系统假设默认资源(来自没有配置限定符的目录)是为基线屏幕密度(mdpi)设计的,除非它们是从特定于密度的资源目录中加载的。因此,当将位图调整到当前屏幕密度的适当大小时,预缩放就是系统所做的事情。

简单地说,--如果你不提供一个密度,安卓就把它们作为mdpi来处理。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31781712

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档