同一张图片放在不同的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的最小字节数
实例
1 2 3 4 5 6 7 8 |
//使用的图片在电脑上显示大小 442kb, 像素 1200*1720 //测试机型屏幕515dpi Bitmap bitmap = ((BitmapDrawable) imageView.getDrawable()).getBitmap(); //xhdpi 文件夹: 每行字节数=8400,宽度=2100,高度=3010,总大小=25284000 //xxhdpi 文件夹: 每行字节数=5600,宽度=1400,高度=2007,总大小=11239200 Log.i("Bitmap", "Bitmap 每行字节数=" + bitmap.getRowBytes() + ",宽度=" + bitmap.getWidth() + ",高度=" + bitmap.getHeight() + ",总大小=" + bitmap.getByteCount()); |
0 Comments