Android 图片缩放 BitmapFactory详解
来源:互联网 发布:中国移动宽带网络测速 编辑:程序博客网 时间:2024/05/17 06:23
参考:android之BitmapFactory.Options的使用
在把图片转化为bitmap时,遇到大一些的图片,我们经常会遇到OOM(Out Of Memory)的问题。因此需要把图片进行缩放。
Options
这就用到了我们上面提到的BitmapFactory.Options这个类,下面逐一介绍Options的参数
Options.inJustDecodeBounds
BitmapFactory.Options这个类,有一个字段叫做 inJustDecodeBounds ,如果我们把它设为true,那么BitmapFactory.decodeFile(String path, Options opt)并不会真的返回一个Bitmap给你,它仅仅会把它的宽,高取回来给你,这样就不会占用太多的内存,也就不会那么频繁的发生OOM了。
如果我们把它设为true,那么BitmapFactory.decodeFile(String path, Options opt)并不会真的返回一个Bitmap给你,它仅仅会把它的宽,高取回来给你,这样就不会占用太多的内存,也就不会那么频繁的发生OOM了。
BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; Bitmap bmp = BitmapFactory.decodeFile(path, options);/* 这里返回的bmp是null */
之后,options.outWidth 和 options.outHeight就是我们想要的宽和高了。可以根据需要进行图片的缩略,在文章最后附上图片缩放代码
Options.inSampleSize
图片的缩放比例,该参数需要自己通过计算得到,一般通过options.outHeight和 options. outWidth获取的宽高和自己想要到得图片宽高计算出缩放比例。下面会给出缩放代码
为了节约内存我们还可以使用下面的几个字段:
options.inDither=false; /*不进行图片抖动处理*/ options.inPreferredConfig=null; /*设置让解码器以最佳方式解码*/ /* 下面两个字段需要组合使用 */ options.inPurgeable = true; options.inInputShareable = true;
BitmapFactory的一些方法
这些方法可以用于从不同的数据源解析、创建Bitmap对象
BitmapFactory.decodeByteArray(byte[] data, int offset, int length)
从指定字节数组的offset位置开始,将长度为length的字节数据解析成Bitmap对象BitmapFactory.decodeFile(String path)
该方法将指定路径的图片转成Bitmap,
BitmapFactory.decodeFile(String path, Options options)
该方法使用options的变量信息,将指定路径的图片转成BitmapdecodeResource()
可以将/res/drawable/内预先存入的图片转换成Bitmap对象- decodeStream()
方法可以将InputStream对象转换成Bitmap对象。
- decodeStream()
图片缩放代码:
private Bitmap decodeThumbBitmapForFile(String path, int viewWidth, int viewHeight){ BitmapFactory.Options options = new BitmapFactory.Options(); //设置为true,表示解析Bitmap对象,该对象不占内存 options.inJustDecodeBounds = true; BitmapFactory.decodeFile(path, options); //设置缩放比例 options.inSampleSize = computeScale(options, viewWidth, viewHeight); //设置为false,解析Bitmap对象加入到内存中 options.inJustDecodeBounds = false; Log.e(TAG, "get Iamge form file, path = " + path); //返回Bitmap对象 return BitmapFactory.decodeFile(path, options); }
computeScale() 计算缩放比例:
private int computeScale(BitmapFactory.Options options, int viewWidth, int viewHeight){ int inSampleSize = 1; if(viewWidth == 0 || viewWidth == 0){ return inSampleSize; } int bitmapWidth = options.outWidth; int bitmapHeight = options.outHeight; //假如Bitmap的宽度或高度大于我们设定图片的View的宽高,则计算缩放比例 if(bitmapWidth > viewWidth || bitmapHeight > viewWidth){ int widthScale = Math.round((float) bitmapWidth / (float) viewWidth); int heightScale = Math.round((float) bitmapHeight / (float) viewWidth); //为了保证图片不缩放变形,我们取宽高比例最小的那个 inSampleSize = widthScale < heightScale ? widthScale : heightScale; } return inSampleSize; }
- Android 图片缩放 BitmapFactory详解
- Android BitmapFactory 图片压缩
- BitmapFactory.Options处理图片的缩放
- 通过BitmapFactory.Options来缩放图片
- Android中自定义布局中加载图片BitmapFactory.options详解
- Android实战简易教程-第九枪(BitmapFactory.Options对资源图片进行缩放)
- Android实战简易教程<九>(BitmapFactory.Options对资源图片进行缩放)
- Android图片之Bitmap、BitmapFactory
- Android中BitmapFactory.Options详解
- Android中BitmapFactory.Options详解
- Android中BitmapFactory.Options详解
- Android中BitmapFactory.Options详解
- Android中BitmapFactory.Options详解
- Android中BitmapFactory.Options详解
- Android中BitmapFactory.Options详解
- 解决BitmapFactory.decodeResource时出现图片缩放的问题
- 关于android缩放bitmap,BitmapFactory.Options.inSampleSize的优化算法
- android下载网络图片,BitmapFactory创建bitmap
- (4.3.1.14)子线程调用Toast报Can't create handler inside ~~~ 错误
- C++ STL 常用方法(函数)之-map篇
- Andriod模块化开发框架
- 【Android】在android中使用lamdba表达式,gradle-retrolamdba开源项目使用---尝试未果,有待解决
- git入门
- Android 图片缩放 BitmapFactory详解
- 【Android】unit testing 单元测试
- jenkins+gradle+android 定时自动打包
- 漂亮得不像实力派!
- VISUAL SVN安装 及客户端使用
- hdu 1978 How many ways
- javascript常用方法函数收集
- extmail安装配置
- Windows/MFC_中__declspec 的用法