我在检查某些资源图像的某些解码时间时注意到了,
当我将资源图像移动到BitmapFactory.decodeResource()
文件夹时,drawable
函数的速度大约慢3-6倍。
问题:
有人知道为什么会这样吗?即使图像位于drawable
文件夹中,图像也会缩放吗?如果不在每个文件夹中存储图像副本,是否可以防止这种情况?
详细信息:
我使用以下代码来检查图像的解码时间。
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
文件夹中,则这些是解码时间:
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
文件夹中,则结果如下:
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
答案 0 :(得分:1)
我找到了解决问题的方法。
它可能会帮助别人。
<强>解决方案:强>
将图像放入drawable-nodpi
文件夹可防止图像缩放。
其他信息:
在这种情况下,在每个其他文件夹中缩放图像,
甚至在drawable
文件夹中。
我在解码不同文件夹中的资源后检查了位图大小。
原始尺寸774x1280
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
感谢Joey Chong我找到了问题的正式答案。在android developers页面上,您可以阅读以下内容:
如果没有正确密度的资源,系统 加载默认资源并根据需要向上或向下扩展它们 匹配当前屏幕的密度。系统假定为默认值 资源(来自没有配置限定符的目录中的资源) 设计用于基线屏幕密度(mdpi),除非它们是 从密度特定的资源目录加载。预缩放是, 因此,当将位图大小调整为适当的时,系统会做什么 当前屏幕密度的大小。
简而言之 - 如果您没有提供密度,Android会将其视为mdpi。