AndroidBitmap的加载与缓存-创新互联

Android系统中图片一般用Bitmap对象表示,它支持png,jpg等常见格式。通常情况下图片的体积都比较大,单个应用允许使用的内存又是有限的,所以我们需要采取一些手段减少内存占用并提高加载速度。

创新互联公司是工信部颁发资质IDC服务器商,为用户提供优质的珉田数据中心服务

1、图片加载

SDK提供了BitmapFactory类供我们加载图片,常用的方法有这么几个:

  •  BitmapFactory.decodeFile :从文件加载。
  •  BitmapFactory.decodeByteArray :从字节数组加载。
  •  BitmapFactory.decodeStream :从输入流加载。
  •  BitmapFactory.decodeResource :从资源文件加载。

假设我们用ImageView显示图片,通常它的尺寸要比图片的尺寸小很多,那么把图片整个加载进内存显然是没有必要的。在图形学上有个名词叫“下采样”,作用就是降低图像的分辨率,使其符合显示区域的大小。通过BitmapFactory.Options类,我们也可以实现同样的功能。这里主要用到了它的 inSampleSize 参数,如果它的值是1,那么采样后的图片跟原图一致,如果是2,那么采样后的图片长和宽都是原来的一半,占用的内存也就是原来的四分之一。

public static Bitmap decodeSampleBitmapFromBytes(byte[] data) {
  final BitmapFactory.Options options = new BitmapFactory.Options();
  // inJustDecodeBounds为true时仅解析图片原始信息,并不会真正加载图片。
  options.inJustDecodeBounds = true;
  BitmapFactory.decodeByteArray(data, 0, data.length, options);
  // 此时图片的宽高可以通过options.outWidth和options.outHeight获取到,我们
  // 可以根据自己的需求计算出采样比。
  options.inSampleSize = 1;
  // inJustDecodeBounds设置为fales,加载图片到内存中。
  options.inJustDecodeBounds = false;
  return BitmapFactory.decodeResource(res, resId, options);
}

本文标题:AndroidBitmap的加载与缓存-创新互联
分享URL:http://ybzwz.com/article/dpepgp.html