BitmapFactory。Options.inSampleSize用法
BitmapFactory.decodeFile(imageFile);
用BitmapFactory解码一张图片时,有时会遇到该错误。这往往是由于图片过大造成的。要想正常使用,则需要分配更少的内存空间来存储。
BitmapFactory.Options.inSampleSize
设置恰当的inSampleSize可以使BitmapFactory分配更少的空间以消除该错误。inSampleSize的具体含义请参考SDK文档。例如:
BitmapFactory.Options opts = new BitmapFactory.Options();opts.inSampleSize = 4;Bitmap bitmap = BitmapFactory.decodeFile(imageFile, opts);
设置恰当的inSampleSize是解决该问题的关键之一。BitmapFactory.Options提供了另一个成员inJustDecodeBounds。
BitmapFactory.Options opts = new BitmapFactory.Options();opts.inJustDecodeBounds = true;Bitmap bitmap = BitmapFactory.decodeFile(imageFile, opts);
设置inJustDecodeBounds为true后,decodeFile并不分配空间,但可计算出原始图片的长度和宽度,即opts.width和opts.height。有了这两个参数,再通过一定的算法,即可得到一个恰当的inSampleSize。
查看Android源码,Android提供了一种动态计算的方法。
public static int computeSampleSize(BitmapFactory.Options options,int minSideLength, int maxNumOfPixels) {int initialSize = computeInitialSampleSize(options, minSideLength,maxNumOfPixels);int roundedSize;if (initialSize <= 8) {roundedSize = 1;while (roundedSize < initialSize) {roundedSize <<= 1;}} else {roundedSize = (initialSize + 7) / 8 * 8;}return roundedSize;}private static int computeInitialSampleSize(BitmapFactory.Options options,int minSideLength, int maxNumOfPixels) {double w = options.outWidth;double h = options.outHeight;int lowerBound = (maxNumOfPixels == -1) ? 1 :(int) Math.ceil(Math.sqrt(w * h / maxNumOfPixels));int upperBound = (minSideLength == -1) ? 128 :(int) Math.min(Math.floor(w / minSideLength),Math.floor(h / minSideLength));if (upperBound < lowerBound) {// return the larger one when there is no overlapping zone.return lowerBound;}if ((maxNumOfPixels == -1) &&(minSideLength == -1)) {return 1;} else if (minSideLength == -1) {return lowerBound;} else {return upperBound;}} 使用该算法,就可动态计算出图片的inSampleSize。BitmapFactory.Options opts = new BitmapFactory.Options();opts.inJustDecodeBounds = true;BitmapFactory.decodeFile(imageFile, opts);opts.inSampleSize = computeSampleSize(opts, -1, 128*128); opts.inJustDecodeBounds = false;try {Bitmap bmp = BitmapFactory.decodeFile(imageFile, opts);imageView.setImageBitmap(bmp);} catch (OutOfMemoryError err) {}
转载于:https://www.cnblogs.com/lost-in-code/archive/2012/04/06/2435325.html
BitmapFactory。Options.inSampleSize用法相关推荐
- BitmapFactory.Options.inSampleSize 的使用方法
BitmapFactory.decodeFile(imageFile); 用BitmapFactory解码一张图片时.有时会遇到该错误. 这往往是因为图片过大造成的. 要想正常使用,则须要分配更少的内 ...
- BitmapFactory.Options详解
在通过BitmapFactory.decodeFile(String path)方法将突破转成Bitmap时,遇到大一些的图片,我们经常会遇到OOM(Out Of Memory)的问题.怎么避免它呢? ...
- 通过BitmapFactory.Options解决activity之间传递图片出现内存溢出(OOM)问题
通过BitmapFactory.Options解决activity之间传递图片出现内存溢出(OOM)问题 参考文章: (1)通过BitmapFactory.Options解决activity之间传递图 ...
- Android中BitmapFactory.Options详解
在Android中,BitmapFactory相信大家都很熟悉了,这个类里面的所有方法都是用来解码创建一个Bitmap,其中有一个重要的类是Options,此类用于解码Bitmap时的各种参数控制,那 ...
- python3华丽gui_Python3.7 - tkinter Gui 03 Options的用法
'''三种Options的方式''' Label(self,text="抗战疫情",width=20,height=2,bg="black",fg=" ...
- javascript当中options的用法
6.options 马克-to-win:选择列表 例 6.1(SelectOptionAddIEFF.html) <!DOCTYPE HTML PUBLIC "-//W3C//DTD ...
- 【Android 内存优化】Bitmap 硬盘缓存 ( Google 官方 Bitmap 示例 | DiskLruCache 开源库 | 代码示例 )
文章目录 一.Google 官方 Bitmap 相关示例参考 二.磁盘缓存类 DiskLruCache 三.磁盘缓存初始化 四.存储数据到磁盘缓存中 五.从磁盘缓存中读取数据 六. Android 1 ...
- 美团外卖Android Crash治理之路
Crash率是衡量一个App好坏的重要指标之一,如果你忽略了它的存在,它就会愈演愈烈,最后造成大量用户的流失,进而给公司带来无法估量的损失.本文讲述美团外卖Android客户端团队在将App的Cras ...
- Android面试题集锦(持续更新)
一.java 熟练掌握java是很关键的,大公司不仅仅要求你会使用几个api,更多的是要你熟悉源码实现原理,甚至要你知道有哪些不足,怎么改进,还有一些java有关的一些算法,设计模式等等. (一)ja ...
最新文章
- CBitmapButton的使用(转)
- Dell服务器的 Idrac调试口的配置方式
- Matlab计时函数使用
- python编程入门与实践_Python编程入门到实践(二)
- ccxt k线数据_机器学习系列:深度探秘K线结构新维度
- 移动流媒体业务的技术与标准
- mysql备份与恢复 cat_MySQL备份和恢复具体实施
- 采集浏览器访问某网站时产生的流量,并保存为pcap文件
- LeetCode(232)——用栈实现队列(JavaScript)
- 用计算的方式,求两个数之间的最大值和最小值
- 使用Reloader实现更新configmap后自动重启pod
- dynamic结合匿名类型 匿名对象传参
- [osg][原创]osg多屏幕显示,会出现透明需要设置的问题
- 图形验证码文字识别——pytesseract
- 《JAVA与模式》— 调停者模式
- 微信闪退Bug罪魁祸首竟是二维码引擎,附源代码分析
- 查看 namespace 下面所有的资源并删除
- java 413错误,413错误——线上bug历险记
- 需求方法论:需求的理解/来源/挖掘/记录
- 【coarse-to-fine:基于频谱和空间损失约束】
热门文章
- 在java中 接口修饰符,Java接口中的修饰符
- java 命名管道_Java中命名管道的并发读/写(在Windows上)
- python输出字符串的后两位_Python字符串三种格式化输出
- 全国计算机二级vb 无纸化,2013年3月全国计算机等级考试二级VB无纸化上机题题库题干及答案解析(2)...
- centos6 mysql密码_CentOS6.5下修改MySQL密码
- Spring Web Flow 入门demo(一)简单页面跳转 附源码
- 一段js动态操作table代码
- MySQL基础课堂笔记
- 【机器学习】层次聚类
- Pycharn比较好的配色方案