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。

public static Bitmap createImageThumbnail(String filePath){        Bitmap bitmap = null;   BitmapFactory.Options opts = new BitmapFactory.Options();        opts.inJustDecodeBounds = true;   BitmapFactory.decodeFile(filePath, opts);      opts.inSampleSize = computeSampleSize(opts, -1, 128*128);        opts.inJustDecodeBounds = false;        try {   bitmap = BitmapFactory.decodeFile(filePath, opts);        }catch (Exception e) {   // TODO: handle exception       }   return bitmap;   }   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;   }   }

BitmapFactory.Options.inSampleSize 的使用方法相关推荐

  1. BitmapFactory。Options.inSampleSize用法

    BitmapFactory.Options.inSampleSize用法 BitmapFactory.decodeFile(imageFile); 用BitmapFactory解码一张图片时,有时会遇 ...

  2. BitmapFactory.Options详解

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

  3. Chrome不显示OPTIONS请求的解决方法2021版chrome90

    在chrome90上之前展示跨域请求预检请求的方法失效了: 在chrome地址栏总输入 chrome://flags/#out-of-blink-cors 将其设置为Disabled后重启浏览器 在c ...

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

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

  5. Android中BitmapFactory.Options详解

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

  6. BURP 测试出 OPTIONS PUT DELETE TRACE 方法

    先去 https://portswigger.net/burp/ 下载 Community Edition的burp 安装启动后拿到代理地址(如下图0 设置代理 然后在浏览器中输入想要测试的地址访问 ...

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

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

  8. 【Android 内存优化】Bitmap 内存缓存 ( Bitmap 内存复用 | 弱引用 | 引用队列 | 针对不同 Android 版本开发不同的 Bitmap 复用策略 | 工具类代码 )

    文章目录 一.Bitmap 复用池 二.弱引用 Bitmap 内存释放 三.从 Bitmap 复用池中获取对应可以被复用的 Bitmap 对象 1.Android 2.3.3(API 级别 10)及以 ...

  9. 【Android 内存优化】Bitmap 内存缓存 ( Bitmap 缓存策略 | LruCache 内存缓存 | LruCache 常用操作 | 工具类代码 )

    文章目录 一.Bitmap 内存缓存策略 二.LruCache 内存缓存 三.LruCache 常用操作 四.LruCache 工具类 五.源码及资源下载 官方参考 : Google 官方提供的 内存 ...

最新文章

  1. 为什么(#39;b#39;+#39;a#39;+ +#39;a#39;+#39;a#39;)。toLowerCase()#39;banana#39;的结果?
  2. ios 自动缩小字体_小字体紫筑B丸85%中粗体文件+deb双版本
  3. python几乎无所不能 只有你不知道的,如何通过Python玩转小视频
  4. php 初始二维数组长度,php二维数组排序与默认自然排序的方法介绍
  5. CentOS7 源码编译安装Redis shell脚本
  6. jpa 公共字段顺序_临沂沂水景观花箱销售公司公共使用
  7. 列表生成式、生成器表达式、模块导入
  8. svn合并不同树_SVN分支与合并【超详细的图文教程】(转载)
  9. Qt学习—qt编写定时关机程序
  10. kmz转换为dwg_CAD软件中的PDF插件如何实现转换DWG?一篇文章完整解释
  11. 找不到引道分区_惠普笔记本单固态分区教程
  12. python找到长度最长的单词长度,python中的正则表达式:查找长度为n或更长的单词...
  13. 亲身经历,大龄程序员找工作,为什么这么难...
  14. 适合练习听力的英文电影推荐
  15. [高数][高昆轮][高等数学上][第一章-函数与极限]07.无穷小的比较
  16. 汽车发动机ECU硬件在环测试系统ETest设计与实现
  17. 2021年危险化学品经营单位安全管理人员考试内容及危险化学品经营单位安全管理人员考试试卷
  18. usb 键盘码表_ASCII码表,键盘按键码表,虚拟键盘按键码表
  19. 坐标轴删了怎么恢复_EXCEL表折线图已经删掉的图例怎么恢复 - 卡饭网
  20. startuml java 类图_【StarUML】类图

热门文章

  1. “间谍芯片”疑云:谁在撒谎?警示何在?
  2. 工业机器人发展现状:硬件制造大同小异,视觉感知绘新蓝图
  3. 量子霸权是个模糊的里程碑
  4. 基于互联网云脑架构分析百度的现状与未来
  5. 前百度首席科学家吴恩达携手富士康,要用人工智能升级制造业
  6. 迷惑行为赏析:把 jpg 图片加密后卖了 247 万
  7. Hey!你的 CSDN 年度报告已出炉,请查收~
  8. 互联网人职业发展之路,你中招了吗?| 每日趣闻
  9. 第二十章:异步和文件I/O.(十一)
  10. 格式化的盘要怎么寻回文件