还是先把这个表格画出来:
drawable
mdpi
hdpi
xhdpi
xxhdpi
xxxhdpi
density
1
1.5
2
3
4
densityDpi
160
240
320
480
640
一般来说,图片的大小满足以下计算公式。
图片大小 = 图片像素点个数 * 每个像素点大小
1 图片像素点个数
那我们就先来看图片像素点个数这个因素,由前两篇文章我们得知,图片像素点个数不仅和图片本身大小相关,还和放在哪个文件夹以及手机屏幕dpi值都有着密切的关联。
在drawable-xhdpi中放置一张宽高为1125 X 900的图片,运行以下代码打印了一些相关的值。
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
Log.d("zp_test", "density: " + metrics.density);
Log.d("zp_test", "densityDpi: " + metrics.densityDpi);
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.bg);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
LogUtils.d("memory 1: " + bitmap.getAllocationByteCount());
}
LogUtils.d("height: " + bitmap.getHeight());
LogUtils.d("width: " + bitmap.getWidth());
image.png
900的高度,像素点怎么会变成1238呢?其实只是等比例放大了,因为手机的density值为2.75,而xhpi文件夹的值为2。
2.75 / 2 * 900 = 1237.5 ≈ 1238
宽度以此类推。
2 像素点大小
图片常见的格式如下:
ARGB_4444,每个像素点2个字节(2byte)
ARGB_8888,每个像素点4个字节(4byte)
RGB_565,每个像素点2个字节(2byte)
而Android手机中,图片的格式和原图的某些属性相关,这里就不作展开讨论。
而此张图的格式为ARGB_8888,也就是4个字节,所以打印出来的大小是这样计算出来的:
1238 * 1547 * 4 = 7660744