Android 图片大小

在Android开发中创建一个Bitmap时,其单位像素占用的字节数由其参数BitmapFactory.Options的inPreferredConfig变量决定。inPreferredConfig为Bitmap.Config类型,它可以为以下值:

图片格式(Bitmap.Config) 占用内存的计算方式 一张100*100的图片占用内存的大小
ALPHA_8代表8位Alpha位图 图片长度*图片宽度 100 * 100=10000字节
ARGB_4444代表16位ARGB位图 图片长度*图片宽度 * 2 100 * 100 * 2=20000字节
ARGB_8888代表32位ARGB位图 图片长度*图片宽度 * 4 100 * 100 * 4=40000字节
RGB_565代表8位RGB位图 图片长度*图片宽度 * 2 100 * 100 * 2=20000字节

另外,需要注意这里的图片占用内存是指在Navtive中占用的内存,当然Bitmap使用的绝大多数内存就是该内存。
因此,我们可以简单的认为它就是Bitmap所占用的内存。
Bitmap对象在不使用时,我们应该先调用recycle(),然后才它设置为null.
虽然Bitmap在被回收时可以通过BitmapFinalizer来回收内存。但是调用recycle()是一个良好的习惯
在Android4.0之前,Bitmap的内存是分配在Native堆中,调用recycle()可以立即释放Native内存。
从Android4.0开始,Bitmap的内存就是分配在dalvik堆中,即Java堆中的,调用recycle()并不能立即释放Native内存。但是调用recycle()也是一个良好的习惯。

density densityDpi drawable
0.75 120 l
1 160 m
1.5 240 h
2 320 xh
3 480 xxh
3.5 560 xxxh
4 640 xxxxh

图片大小计算公式:
假设图片宽为Xpx,高为Ypx,把图片放到dpi为Z dpi的drawable目录下(h,xxh,xxxh),运行时手机的dpi为M dpi,图片的Bitmap.Config,为ARGB_8888的32位图,则图片在运行的手机上所占用的内存为:

在手机上图片大小 = ( XM/Z +0.5)(YM/Z+0.5)4

其实,通过计算公式,我们就不难知道,Bitmap 在内存当中占用的大小其实取决于:

1.色彩格式,前面我们已经提到,如果是 ARGB8888 那么就是一个像素4个字节,如果是 RGB565 那就是2个字节
2.原始文件存放的资源目录(是 hdpi 还是 xxhdpi 可不能傻傻分不清楚哈)
3.目标屏幕的密度(所以同等条件下,红米在资源方面消耗的内存肯定是要小于三星S6的)

赞赏

微信

      
支付宝

http://bugly.qq.com/bbs/forum.php?mod=viewthread&tid=498
http://www.cnblogs.com/jiangz/p/3428186.html
http://bugly.qq.com/bbs/forum.php?mod=viewthread&tid=498
http://blog.csdn.net/zhaokaiqiang1992/article/details/49787117
http://sodino.com/2015/05/25/check-bitmap-size/
http://mp.weixin.qq.com/s?__biz=MzI3MDE0NzYwNA==&mid=2651433713&idx=1&sn=d152b053221c4c0bf1baa684b2a51e9c&scene=23&srcid=0805ti3zGykdgDuw65pZt6Wr#rd
https://github.com/bingoogolapple/bingoogolapple.github.io/issues/109

你可能感兴趣的:(Android 图片大小)