一张图片100x100在内存中的大小
我们常见的png,jpg格式都只是图片的存储形式,它们都是经过相对应的压缩算法将原图上的每一个像素点信息转换为另一种数据格式表示,以此达到压缩的目的,从而减少图片文件的内存 而当我们通过代码将一张图片加载到内存中时,
- 首先会解析图片文件本身的数据格式
- 其次还原位图,也就是Bitmap对象,Bitmap对象的大小取决于像素点的数据格式和分辨率。
所以图片文件的大小与图片文件的保存格式,跟这张图片加载到内存所占用的大小完全是两回事 计算图片占用的内存大小公式:分辨率*每个像素点的大小 每个像素点的大小和加载位图的格式有关:常见的两种位图加载格式是RGB565和ARGB8888 RGB565表示:R占用5为数据,G占用6位数据,B占用5位数据,因此一个像素点占用16位,即两字节 ARGB8888表示:增加了A透明度,每一个都占用8位数据,因为32位即四字节 因此一张100100的图片在240dpi的设备中显示时,分别用RGB565和ARGB8888来显示占用的内存大小分别是: RGB565:1001002 ARGB8888:100100*4
drawable的不同的像素密度
Android中提供了多个存放图片的文件夹,分别为mdpi,hdpi ,xhdpi xxhdpi, xxxhdpi。Andriod系统会根据手机屏幕的大小及屏幕密度去选择不同文件夹下的图片资源,以此来实现在不同大小不同屏幕分辨率下适配的问题。
比如在一个低分辨率的手机上,Android就会选择mdpi文件夹下的图片,但是如果没有在mdpi的文件夹下找见相关的资源文件,Android系统会首先从xxxhdpi 文件夹中选择文件,然后对图片资源进行缩放处理,显示在屏幕上;如果xxxhdpi 文件夹下也没有的话,依次类推,若都没找到话,会在默认的drawable文件夹中寻找。 在对应的文件夹没找到,就从高分辨率的文件夹依次向低分辨率的文件夹寻找。 注意:同一张图片,低分辨率的文件夹在手机上展示会被扩大,高分辨率的文件夹在手机上会被缩小 要在像素密度不同的设备上提供良好的图形质量,您应该以相应的分辨率在应用中提供每个位图的多个版本(针对每个密度级别提供一个版本)。否则,Android 系统必须缩放位图,使其在每个屏幕上占据相同的可见空间,从而导致缩放失真,如模糊。
要针对不同的密度创建备用可绘制位图资源,您应遵循六种主要密度之间的 3:4:6:8:12:16 缩放比。例如,如果您有一个可绘制位图资源,它在中密度屏幕上的大小为 48x48 像素,那么它在其他各种密度的屏幕上的大小应该为: 36x36 (0.75x) - 低密度 (ldpi) 48x48(1.0x 基准)- 中密度 (mdpi) 72x72 (1.5x) - 高密度 (hdpi) 96x96 (2.0x) - 超高密度 (xhdpi) 144x144 (3.0x) - 超超高密度 (xxhdpi) 192x192 (4.0x) - 超超超高密度 (xxxhdpi)
如在网易云的res目录下,xxxhdpi屏幕上的大小是4848,那么在xxhpdi中的大小就是3636,xhdpi中的大小就是24*24像素