相信作Android开发的小伙伴对于Android图片压缩、裁剪必定有很深的印象,今天我将带领你们一块儿学习一下这个看着高深莫测的知识,以便再之后的学习、工做中能够帮助到你们。缓存
首先咱们看一下这个问题出现的缘由,当咱们须要在咱们的应用中添加大量图片是,程序每每会报出OMM问题,这是什么问题呢?是当咱们添加的照片过多或过大时,Android就会报出超内存错误,每每咱们遇到这个问题都很无奈,进行图片缓存优化能够帮助咱们解决这个问题,可是不少时候咱们根本不知道,如何进行内存优化,很明显我就是这样的一位,这里我采用了压缩图片、裁剪图片的方式,减小图片占用的内存,从而使图片展现流畅。函数
下面咱们先看一下如何进行图片的裁剪:裁剪图片有两种方式,一种调用系统的裁剪方式,这种方式能够方便用户选择本身的裁剪区域,不少关于图片裁剪的视频,讲的就是这一种;第二种是经过后台函数直接进行裁剪,这种方式的好处在于,简化了用户的操做,方便快捷。对于第一种,你们能够百度一下,本篇咱们一块儿来探讨一下如何经过后台函数实现对图片的自动裁剪。学习
File file = new File(fileString);//文件对象;fileString:文件的地址 InputStream is = null; try { is = new FileInputStream(file);//得到一个文件输入流对象 } catch (FileNotFoundException e) { e.printStackTrace(); } BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = false;//这个参数必定要设置为false;若是将其设为true的话,在decode时将会返回null,经过此设置能够去查询一个bitmap的属性,好比bitmap的长与宽,而不占用内存大小 double n = file.length()/1024.0;//得到文件的大小 if(n<200){ options.inSampleSize = 2;//width,hight设为原来的二分一 }else{ options.inSampleSize = 3;//width,hight设为原来的三分一 } Bitmap bitmap = BitmapFactory.decodeStream(is, null, options);
BitmapFactory.decodeStream(is, null, options);根据上面咱们设置压缩比,对图片进行压缩处理。优化
下面咱们一块儿来谈谈如何进行图片的裁剪,这里我介绍的是自定义裁剪,经过咱们设置裁剪起点和裁剪长宽值实现对图片的裁剪。这里我将以实现一个根据图片的长宽,取最短边为边居中裁剪。spa
int w = options.outWidth;//获得图片的宽 int h = options.outHeight;//获得图片的高 int wh = w > h ? h : w;// 裁切后所取的正方形区域边长 int retX = w > h ? (w - h) / 2 : 0;//基于原图,取正方形左上角x坐标 int retY = w > h ? 0 : (h - w) / 2;//基于原图,取正方形左上角y坐标 Bitmap.createBitmap(bitmap, retX, retY, wh, wh, null, false);
好了关于图片的压缩与裁剪就为你们介绍完了,但愿对你们有一些帮助吧。ImageView实现适屏和裁剪图片的功能视频下载:http://pan.baidu.com/s/1mhkM1s8code