程序员开发百宝箱Android开发进阶经验分享

Android 一张图片BitMap占用内存的计算

2017-03-29  本文已影响1604人  meixinxicun

图片大小的影响因素

android中大的图片一般要经过压缩才显示,否则可能会发生OOM。
图片所占用的内存和图片的宽度、长度、单位像素占的字节数三个因素有关。

图片色彩

我们都知道颜色经常用ARGB来表示,A表示Alpha,即透明度;R表示red,即红色;G表示green,即绿色;B表示blue,即蓝色。Bitmap的色彩也是用ARGB来表示的

Bitmap.Config

Bitmap.Config中有Bitmap.Config.ALPHA_8、Bitmap.Config.RGB_565、Bitmap.Config.ARGB_4444、Bitmap.Config.ARGB_8888有四个枚举变量。
Bitmap.Config.ALPHA_8表示:每个像素占8位,没有色彩,只有透明度A-8,共8位。
Bitmap.Config.ARGB_4444表示:每个像素占16位,A-4,R-4,G-4,B-4,共4+4+4+4=16位。
Bitmap.Config.RGB_565表示:每个像素占16位,没有透明度,R-5,G-6,B-5,共5+6+5=16位。
Bitmap.Config.ARGB_8888表示:每个像素占32位,A-8,R-8,G-8,B-8,共8+8+8+8=32位。
位数越高,那么可存储的颜色信息越多,图像也就越逼真。

Bitmap内存计算

ARGB_8888是最占内存的,因为一个像素占32位,8位=1字节,所以一个像素占4字节的内存。ARGB_4444的一个像素占2个字节。RGB_565的一个像素也是占两个字节。ALPHA_8的一个像素只占一个字节。
一个图片的像素=图片宽度 × 图片长度。
一张图片(BitMap)占用的内存=图片宽度×图片长度×单位像素占用的字节数(图片的像素×单位像素占用的字节数)
假设有一张480x800的图片,四个格式下所占的内存如下

类型 内存计算 占内存大小(B 占内存大小(KB)
ARGB_8888 480×800×4 1536000 1536000÷1024=1500
ARGB_4444 480×800×2 768000 768000÷1024=750
ARGB_565 480×800×2 768000 768000÷1024=750
ARGB_8 480×800×1 384000 384000÷1024=375
上一篇下一篇

猜你喜欢

热点阅读