android之BitmapFactory.Options的使用

,BitmapFactory.Options的使用是在加载图片时,就从图片的加载和使用说起 怎样获取图片的大小?首先我们把这个图片转成Bitmap,然后再利用Bitmap的getWidth()和getHeight()方法就可以取到图片的宽高了。新问题又来了,在通过BitmapFactory.decodeFile(String path)方法将突破转成Bitmap时,遇到大一些的图片

大家好,又见面了,我是全栈君。

,BitmapFactory.Options的使用是在加载图片时,就从图片的加载和使用说起

 

怎样获取图片的大小?
首先我们把这个图片转成Bitmap,然后再利用Bitmap的getWidth()和getHeight()方法就可以取到图片的宽高了。
新问题又来了,在通过BitmapFactory.decodeFile(String path)方法将突破转成Bitmap时,遇到大一些的图片,我们经常会遇到OOM(Out Of Memory)的问题。怎么避免它呢?
这就用到了我们上面提到的BitmapFactory.Options这个类。

BitmapFactory.Options这个类,有一个字段叫做 inJustDecodeBounds 。SDK中对这个成员的说明是这样的:
If set to true, the decoder will return null (no bitmap), but the out…
也就是说,如果我们把它设为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就是我们想要的宽和高了。

有了宽,高的信息,我们怎样在图片不变形的情况下获取到图片指定大小的缩略图呢?
比如我们需要在图片不变形的前提下得到宽度为200的缩略图。
那么我们需要先计算一下缩放之后,图片的高度是多少 ,代码如下

int height = options.outHeight * 200 / options.outWidth;

options.outWidth = 200;

options.outHeight = height; 

options.inJustDecodeBounds = false;

Bitmap bmp = BitmapFactory.decodeFile(path, options);

image.setImageBitmap(bmp);

这样虽然我们可以得到我们期望大小的ImageView
但是在执行BitmapFactory.decodeFile(path, options);时,并没有节约内存。要想节约内存,还需要用到BitmapFactory.Options这个类里的 inSampleSize 这个成员变量。
我们可以根据图片实际的宽高和我们期望的宽高来计算得到这个值。

options.inSampleSize = options.outWidth / 200; /*图片长宽方向缩小倍数*/
另外,为了节约内存我们还可以使用下面的几个字段:
options.inDither=false;    /*不进行图片抖动处理*/
options.inPreferredConfig=null;  /*设置让解码器以最佳方式解码*/

/* 下面两个字段需要组合使用 */

options.inPurgeable = true;

options.inInputShareable = true;
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/121437.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 偏度和峰度的计算

    偏度和峰度的计算偏度(skewness)和峰度(kurtosis):偏度能够反应分布的对称情况,右偏(也叫正偏),在图像上表现为数据右边脱了一个长长的尾巴,这时大多数值分布在左侧,有一小部分值分布在右侧。峰度反应

  • 用户行为路径分析报告_spark用户行为分析

    用户行为路径分析报告_spark用户行为分析请看题:已知用户行为表tracking_log,大概字段有:(user_id用户编号,op_id操作编号,op_time操作时间)要求:统计每天符合以下条件的用户数:A操作之后是B操作,AB操作必须相邻。生成数据,可以在sqlfiddle中测试:createtabletracking_log(idintprimarykeyAUTO_INCREMENT,user_idintnotnull,op_idchar(4)notnull,op

  • 万能激活成功教程器修改器_激活成功教程软件

    万能激活成功教程器修改器_激活成功教程软件神呐原谅我吧为了省$35啊删掉注册表[HKEY_CURRENT_USER\Software\Classes\CLSID\{B1159E65-821C3-21C5-CE21-34A484D54444}\4FF78130]该项下的所有内容

  • C#修改connectionStrings的方法

    C#修改connectionStrings的方法读取protectedvoidPage_Load(objectsender,EventArgse){CheckLoginMyChk=newCheckLogin();title.InnerHtml=”<b>数据库连接配置</b>”;if(!IsP…

  • MySQL-索引;视图「建议收藏」

    MySQL-索引;视图「建议收藏」一、索引MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。如:我们通过汉字字典查找汉字有两种方式(1)一页一页挨着找,直到找到为止,这种查找方式属于全字典扫描(2)通过汉语字典的目录页(索引),按拼音、笔画、偏旁部首等排序的目录(索引)缩小查找范围快速查找到需要的字select*fromt_userwherename=’zhangsan’;如果name字段上没有添加索引(目录),或者说没有给name字段创建索引,MySQL会

  • stc12c5a60s2功能说明(STC12C5A60S2默认触发)

    最近学习一下SD卡的驱动,网上程序的版本很多,使用的MCU和SD卡的型号千奇百怪,学起来反而没有方向,感觉上乱七八糟的,直到现在,才直到我们平常说的SD卡实际上有很多中类别。0到2G的SD卡,最普通的卡;2G到32G的SDHC卡,也就是现在最常用的大容量SD卡;还有我没有见过的SDXC卡,容量好像在32G以上。同时还有手机上的TF卡,实际上也是SD卡只不过做工不同而已,MMC卡。学习的时候走了很

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号