BitMap图像缓存

博客:Android图片压缩必备基础知识

Android Bitmap 操作详解

   屏幕分辨率等于√(长的像素数量²+宽的像素数量²)/对角线长度。它的含义代表一英寸还有的像素个数。屏幕上的一个点代表一个像素(像素单位为px)。如果同样尺寸的手机屏幕一个是640*480(1号机) 一个是1600*1200(2号机)。那么展示一个100*100px的图像,那么在1号机展示的图像大小将要比2号机展示的更大。同时也要比2号机展示的更加粗糙。同样尺寸的手机显示的像素个数越多也就是px越多,那么也就是分辨率越高,那么显示效果一定就是越细腻。

img-0

   在Android里面获取一个Bitmap的内存大小的话可以通过Bitmap.getAllocationByCount()方法获取,当然这是在api>=19的时候才出来的新方法。以前是通过getByteCount()。(这部分知识是在看Glide源码的时候,看到LruBitmapPool类的时候,了解到这个类是用来存放我们加载进来的bitmap的,当然不是任何大小的bitmap他都做缓存,不然的话很大的图片也缓存那么手机的内存一定直接爆炸。在每次put的时候他会先调用类SizeStrategy.getSize(bitmap)方法获取这个bitmap的大小做判断)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// 获取一个bitmap的占用的内存大小
public static int getBitmapByteSize(@NonNull Bitmap bitmap) {
if (bitmap.isRecycled()) {
return;
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
try {
return bitmap.getAllocationByteCount();
} catch (
@SuppressWarnings("PMD.AvoidCatchingNPE")
NullPointerException e) {
}
}
return bitmap.getHeight() * bitmap.getRowBytes();
}

更多案例可以看这篇博客:Android中一张图片占据的内存大小是如何计算的

实现一个高斯模糊:封装个 Android 的高斯模糊组件