不同的drawable文件夹对图片内存占用的影响

同一张图片放在不同的drawable文件夹里, 使用时占用的内存是不一样的;

不同文件夹对应dpi

在android中, 以160dpi 的屏幕为基准, 在此屏幕上 1dip = 1px;

密度 描述
ldpi 低密度屏幕;约为 120dpi。
mdpi 中等密度(传统 HVGA)屏幕;约为 160dpi。
hdpi 高密度屏幕;约为 240dpi。
xhdpi 超高密度屏幕;约为 320dpi。此项为 API 级别 8 中新增配置
xxhdpi 超超高密度屏幕;约为 480dpi。此项为 API 级别 16 中新增配置
xxxhdpi 超超超高密度屏幕使用(仅限启动器图标,请参阅“支持多种屏幕”中的注释);约为 640dpi。 此项为 API 级别 18 中新增配置
nodpi 它可用于您 不希望缩放 以匹配设备密度的位图资源。
tvdpi 密度介于 mdpi 和 hdpi 之间的屏幕;约为 213dpi。它并不是“主要”密度组, 主要用于电视,而大多数应用都不需要它。对于大多数应用而言,提供 mdpi 和 hdpi 资源便已足够,系统将根据需要对其进行缩放。此项为 API 级别 13 中新增配置
anydpi 此限定符适合所有屏幕密度,其优先级高于其他限定符。 这对于矢量可绘制对象很有用。 此项为 API 级别 21 中新增配置

六个主要密度之间的缩放比为 3:4:6:8:12:16(忽略 tvdpi 密度)。因此,9×9 (ldpi) 位图相当于 12×12 (mdpi)、18×18 (hdpi)、24×24 (xhdpi) 位图,依此类推。官网详细介绍

当手机屏幕密度与图片所在文件夹代表的密度不同时, 就会对图片自动缩放


计算图片大小

一张图片(Bitmap)占用多少内存, 取决于它在内存中的 像素点个数和每个像素点占用的字节数, 这个像素点总个数, 由于图片的自动缩放, 所以和我们在电脑上预览图片看到的像素个数不同;

单个像素占用的字节数

单像素占用字节数, 与编码(Bitmap.Config)有关;

密度 描述
ALPHA_8 每个像素一字节
ARGB_4444 四字节(已弃用)
ARGB_8888 每个像素四个字节
RGB_565 2个字节, 只对RGB编码

获取 bitmap 的大小信息

  • getWidth() 获取一行像素点数量
  • getHeight() 一列像素点数量
  • getRowBytes() 一行占用的字节数
  • getConfig() 返回该 bitmap 的 Bitmap.Config
  • getByteCount() 返回能存储该bitmap的最小字节数

实例

0 Comments
Leave a Reply