Android 基础篇 — Bitmap到底多大?

Android 基础篇 — Bitmap到底多大?_第1张图片

有了前面两篇文章的铺垫,我们计算Bitmap的大小就相对来说比较简单了。
Android 基础篇 — 不同DPI取哪个本地文件夹中的资源
Android 基础篇 — 放不同drawable文件夹中图片的大小

还是先把这个表格画出来:

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());
Android 基础篇 — Bitmap到底多大?_第2张图片
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

你可能感兴趣的:(Android 基础篇 — Bitmap到底多大?)