Android API中有个方便的方法,可以计算Bitmap在运行中占多大内存。
public final int getByteCount() { // int result permits bitmaps up to 46,340 x 46,340 return getRowBytes() * getHeight();}
那给一张图片,如何不通过代码如何知道占用的内存大小呢?
1. 我们知道图片使用色彩格式的,在Android中主要有以下几种
ALPHA_8 代表8位Alpha位图,就是Alpha由8位组成
ARGB_4444 代表16位ARGB位图,就是由4个4位组成 ARGB_8888 代表32位ARGB位图,就是由4个8位组成 RGB_565 代表8位RGB位图,就是R为5位,G为6位,B为5位共16位2. 在Android中,图片资源可以放在不同的drawable下,会导致图片的density不同。inDensity
hdpi 240 xhdpi 320 xxhdpi 480 间隔是160
3. 每个手机屏幕的density,就是屏幕每英寸对应多少个点(不是像素点)。inTargetDensity
综上,一个图片在Android占内存的大小,计算方式如下:
width * (inTargetDensity / inDensity) * height * (inTargetDensity / inDensity) * ARGB那么如何减少Bitmap占用内存的大小呢?
使用BitmapFactory.Options设置解析图片的参数
1. 使用inSimpleSize
2. 使用矩阵Matrix
3. 合理选择像素格式
详细可以参考 http://bugly.qq.com/bbs/forum.php?mod=viewthread&tid=498