Android 设置缩略图,injustdecodebounds
来源:互联网 发布:单片机0xff是什么意思 编辑:程序博客网 时间:2024/04/29 20:02
我们去解析一个图片,如果太大,就会OOM,我们可以设置压缩比例inSampleSize,但是这个压缩比例设置多少就是个问题,所以我们解析图片可以分为俩个步骤,第一步就是
获取图片的宽高,这里要设置Options.inJustDecodeBounds=true,这时候decode的bitmap为null,只是把图片的宽高放在Options里,然后第二步就是设置合适的压缩比例inSampleSize,这时候获得合适的Bitmap.这里我画了简单的流程图,如下:
主要是通过BitmapFactory.Options 来实现。
Options中有个属性inJustDecodeBounds。我们可以充分利用它,来避免大图片的溢出问题。他是什么原理呢?
API这样说:如果该 值设为true那么将不返回实际的bitmap,也不给其分配内存空间这样就避免内存溢出了。但是允许我们查询图片的信息这其中就包括图片大小信息(
options.outHeight (图片原始高度)和option.outWidth(图片原始宽度))。
Options中有个属性inSampleSize。我们可以充分利用它,实现缩放。
如果被设置为一个值> 1,要求解码器解码出原始图像的一个子样本,返回一个较小的bitmap,以节省存储空间。
例如,inSampleSize = = 2,则取出的缩略图的宽和高都是原始图片的1/2,图片大小就为原始大小的1/4。
对于任何值< = 1的同样处置为1。
那么相应的方法也就出来了,通过设置 inJustDecodeBounds为true,获取到outHeight(图片原始高度)和 outWidth(图片的原始宽度),然后计算一个inSampleSize(缩放值),
然后就可以取图片了,这里要注意的是,inSampleSize 可能小于0,必须做判断。
实现步骤:
第一步:BitmapFactory.Option
设置 inJustDecodeBounds为true
第二步:BitmapFactory.decodeFile(path,option)方法
解码图片路径为一个位图。如果指定的文件名是空的,或者不能解码到一个位图,函数将返回null[空值]。
获取到outHeight(图片原始高度)和 outWidth(图片的原始宽度)
第三步:计算缩放比例,也可以不计算,直接给它设定一个值。
options.inSampleSize = “你的缩放倍数”;
如果是2就是高度和宽度都是原始的一半。
第四步:设置options.inJustDecodeBounds = false;
重新读出图片
bitmap = BitmapFactory.decodeFile(path, options);
具体代码:
// 设置图片视频的缩略图 imgiv.setImageBitmap(getImageThumbnail(url, 200, 200)); videoiv.setImageBitmap(getVideoThumbnail(urlvideo, 200, 200,
// 获取图片缩略图 public Bitmap getImageThumbnail(String uri, int width, int height) { Bitmap bitmap = null; BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; bitmap = BitmapFactory.decodeFile(uri, options); options.inJustDecodeBounds = false;// 计算缩放比例 int beWidth = options.outWidth / width; int beHeight = options.outHeight / height; int be = 1; if (beWidth < beHeight) { be = beWidth; } else { be = beHeight; } if (be <= 0) { be = 1; } options.inSampleSize = be;// 将缩放后的图片赋给bitmap对象并返回 bitmap = BitmapFactory.decodeFile(uri, options); bitmap = ThumbnailUtils.extractThumbnail(bitmap, width, height, ThumbnailUtils.OPTIONS_RECYCLE_INPUT); return bitmap; }// 获取视频缩略图 private Bitmap getVideoThumbnail(String uri, int width, int height, int kind) { Bitmap bitmap = null; bitmap = ThumbnailUtils.createVideoThumbnail(uri, kind); bitmap = ThumbnailUtils.extractThumbnail(bitmap, width, height, ThumbnailUtils.OPTIONS_RECYCLE_INPUT); return bitmap; }
- Android 设置缩略图,injustdecodebounds
- Android获取图片指定大小的缩略图--inJustDecodeBounds的使用
- android 的injustdecodebounds
- Android中的inJustDecodeBounds
- [转]android 的injustdecodebounds
- android 的injustdecodebounds
- android 的injustdecodebounds
- android 的injustdecodebounds
- android 的injustdecodebounds
- android 图片压缩之 injustdecodebounds
- Android-injustdecodebounds实现对大图压缩
- Android 缩略图
- inJustDecodeBounds解析
- 设置文件缩略图
- VS2015 代码缩略图的设置
- android 生成缩略图
- android 多媒体缩略图
- Android缩略图类源代码
- UVa 1635 Irrelevant Elements
- Android存储访问及目录
- 有用的链接的保存
- Linux多线程编程(一)
- asp.net Url重写
- Android 设置缩略图,injustdecodebounds
- 对string的一些扩展函数
- 小白胡说:构造器和引用传递
- Eclipse如何切换SVN用户
- JS函数内部属性:arguments
- struts2 if标签示例
- Http协议与TCP协议简单理解
- 使用java将多种类型的文件如Word、PDF、JPG汇总到一个文档中(Word或者PDF)
- Mysql 数据库权限导出