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用法相关推荐

  1. BitmapFactory.Options.inSampleSize 的使用方法

    BitmapFactory.decodeFile(imageFile); 用BitmapFactory解码一张图片时.有时会遇到该错误. 这往往是因为图片过大造成的. 要想正常使用,则须要分配更少的内 ...

  2. BitmapFactory.Options详解

    在通过BitmapFactory.decodeFile(String path)方法将突破转成Bitmap时,遇到大一些的图片,我们经常会遇到OOM(Out Of Memory)的问题.怎么避免它呢? ...

  3. 通过BitmapFactory.Options解决activity之间传递图片出现内存溢出(OOM)问题

    通过BitmapFactory.Options解决activity之间传递图片出现内存溢出(OOM)问题 参考文章: (1)通过BitmapFactory.Options解决activity之间传递图 ...

  4. Android中BitmapFactory.Options详解

    在Android中,BitmapFactory相信大家都很熟悉了,这个类里面的所有方法都是用来解码创建一个Bitmap,其中有一个重要的类是Options,此类用于解码Bitmap时的各种参数控制,那 ...

  5. python3华丽gui_Python3.7 - tkinter Gui 03 Options的用法

    '''三种Options的方式''' Label(self,text="抗战疫情",width=20,height=2,bg="black",fg=" ...

  6. javascript当中options的用法

    6.options 马克-to-win:选择列表 例 6.1(SelectOptionAddIEFF.html) <!DOCTYPE HTML PUBLIC "-//W3C//DTD ...

  7. 【Android 内存优化】Bitmap 硬盘缓存 ( Google 官方 Bitmap 示例 | DiskLruCache 开源库 | 代码示例 )

    文章目录 一.Google 官方 Bitmap 相关示例参考 二.磁盘缓存类 DiskLruCache 三.磁盘缓存初始化 四.存储数据到磁盘缓存中 五.从磁盘缓存中读取数据 六. Android 1 ...

  8. 美团外卖Android Crash治理之路

    Crash率是衡量一个App好坏的重要指标之一,如果你忽略了它的存在,它就会愈演愈烈,最后造成大量用户的流失,进而给公司带来无法估量的损失.本文讲述美团外卖Android客户端团队在将App的Cras ...

  9. Android面试题集锦(持续更新)

    一.java 熟练掌握java是很关键的,大公司不仅仅要求你会使用几个api,更多的是要你熟悉源码实现原理,甚至要你知道有哪些不足,怎么改进,还有一些java有关的一些算法,设计模式等等. (一)ja ...

最新文章

  1. CBitmapButton的使用(转)
  2. Dell服务器的 Idrac调试口的配置方式
  3. Matlab计时函数使用
  4. python编程入门与实践_Python编程入门到实践(二)
  5. ccxt k线数据_机器学习系列:深度探秘K线结构新维度
  6. 移动流媒体业务的技术与标准
  7. mysql备份与恢复 cat_MySQL备份和恢复具体实施
  8. 采集浏览器访问某网站时产生的流量,并保存为pcap文件
  9. LeetCode(232)——用栈实现队列(JavaScript)
  10. 用计算的方式,求两个数之间的最大值和最小值
  11. 使用Reloader实现更新configmap后自动重启pod
  12. dynamic结合匿名类型 匿名对象传参
  13. [osg][原创]osg多屏幕显示,会出现透明需要设置的问题
  14. 图形验证码文字识别——pytesseract
  15. 《JAVA与模式》— 调停者模式
  16. 微信闪退Bug罪魁祸首竟是二维码引擎,附源代码分析
  17. 查看 namespace 下面所有的资源并删除
  18. java 413错误,413错误——线上bug历险记
  19. 需求方法论:需求的理解/来源/挖掘/记录
  20. 【coarse-to-fine:基于频谱和空间损失约束】

热门文章

  1. 在java中 接口修饰符,Java接口中的修饰符
  2. java 命名管道_Java中命名管道的并发读/写(在Windows上)
  3. python输出字符串的后两位_Python字符串三种格式化输出
  4. 全国计算机二级vb 无纸化,2013年3月全国计算机等级考试二级VB无纸化上机题题库题干及答案解析(2)...
  5. centos6 mysql密码_CentOS6.5下修改MySQL密码
  6. Spring Web Flow 入门demo(一)简单页面跳转 附源码
  7. 一段js动态操作table代码
  8. MySQL基础课堂笔记
  9. 【机器学习】层次聚类
  10. Pycharn比较好的配色方案