android 图片压缩 —— 3

图片读取是OOM(Out of Memory)的常客,当在Android手机上直接读取4M的图片时,死神一般都会降临,所以导致往往自己手机拍摄的照片都不能直接读取。对大型图片进行缩放有,处理图片时我们经常会用到BitmapFactory类,android系统中读取位图Bitmap时分给虚拟机中图片的堆栈大小只有8M。用BitmapFactory解码一张图片时,有时也会遇到该错误。这往往是由于图片过大造成的。这时我们需要分配更少的内存空间来存储。BitmapFactory.Options.inSampleSize设置恰当的inSampleSize可以使BitmapFactory分配更少的空间以消除该错误。Android提供了一种动态计算的,如下:

读取图片之前先查看其大小:
  • BitmapFactory.Options opts = new BitmapFactory.Options();
  • opts.inJustDecodeBounds = true;
  • Bitmap bitmap = BitmapFactory.decodeFile(imageFile, opts);

[color=rgb(51, 102, 153) !important] 复制代码
使用得到的图片原始宽高计算适合自己的smaplesize
  • BitmapFactory.Options opts = new BitmapFactory.Options();
  • opts.inSampleSize = 4 ;// 4就代表容量变为以前容量的1/4
  • Bitmap bitmap = BitmapFactory.decodeFile(imageFile, opts);

[color=rgb(51, 102, 153) !important] 复制代码
                    
对于过时的Bitmap对象一定要及时recycle,并且把此对象赋值为null。
  • <span style="line-height: 1.5;">bitmap.recycle(); </span>
  • bitmap = null;

你可能感兴趣的:(压缩,图片)