• 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. Android学习笔记之BitmapFactory.Options实现图片资源的加载...

      PS:小项目总算是做完了...历经20多天...素材,设计,以及实现全由自己完成...心力憔悴啊...该写写博客记录一下学习到的东西了... 学习内容: 1.使用BitmapFactory.Optio ...

    2. 【转】BitmapFactory.Options

      BitmapFactory.Options这个类的信息:http://developer.android.com/reference/android/graphics/BitmapFactory.Op ...

    3. android之BitmapFactory.Options的使用

      怎样获取图片的大小? 首先我们把这个图片转成Bitmap,然后再利用Bitmap的getWidth()和getHeight()方法就可以取到图片的宽高了. 新问题又来了,在通过BitmapFactor ...

    4. Android BitmapFactory.Options

      public Bitmap inBitmap 如果设置,解码选项“对象的方法,采取将尝试重用这个位图加载内容时. public int inDensity 使用的位图的象素密度. public boo ...

    5. android 下载图片出现SkImageDecoder::Factory returned null,BitmapFactory.Options压缩

      网上有很多说是因为没有采用HttpClient造成的,尼玛,我改成了HttpClient 请求图片之后还是会出现SkImageDecoder::Factory returned null, 但是直接使 ...

    6. Android实战简易教程-第九枪(BitmapFactory.Options对资源图片进行缩放)

      我们知道,我们编写的应用程序都是有一定内存限制的.程序占用了过高的内存就easy出现OOM(OutOfMemory)异常.因此在展示高分辨率图片的时候,最好先将图片进行压缩,压缩后的图片大小应该和用来 ...

    7. BitmapFactory.Options

      BitmapFactory.Options bmpFactoryOptions = new BitmapFactory.Options(); bmpFactoryOptions.inSampleSiz ...

    8. Android使用BitmapFactory.Options解决加载大图片内存溢出问题

      由于Android对图片使用内存有限制,若是加载几兆的大图片便内存溢出.Bitmap会将图片的所有像素(即长x宽)加载到内存中,如果图片分辨率过大,会直接导致内存溢出(java.lang.OutOfM ...

    9. BitmapFactory.Options对图片进行缩放

      package com.pingyijinren.helloworld.activity; import android.graphics.Bitmap; import android.graphic ...

    随机推荐

    1. 2017-2018-2 20165301 实验四《Java面向对象程序设计》实验报告

      2017-2018-2 20165301 实验四<Java面向对象程序设计>实验报告 一.Android Stuidio的安装测试 实验要求: 参考<Java和Android开发学习 ...

    2. MS-SQL2005服务器登录名、角色、数据库用户、角色、架构的关系

      MS SQL2005对2000进行了很大的改进,而用户关系这部分也变得相当复杂了,很多朋友都对此一知半解!下面,我将把我应用中总结的和大家分享下,先从概念入手,希望对不理解的朋友有点提示. 今天我们要 ...

    3. sublime text配置make工具

      sublime text配置make工具 Linux下许多项目是用makefile来管理的,是用gcc+make等方式来编译和运行. 在只有tty的场合或年代,使用vim或emacs是不二选择:但在L ...

    4. NPOI 读取单元格的格式

      最近做项目需要导入一部分数据, 导入的数据的中, 有部分的百分比数据使用的是excel 的百分比, 有部分的数据使用的是字符串形式的格式,(数据来源于不同的人统计), 格式略微有点乱, 要求导入系统的 ...

    5. PCA(Principal Component Analysis)主成分分析

      PCA的数学原理(非常值得阅读)!!!!   PCA(Principal Component Analysis)是一种常用的数据分析方法.PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可 ...

    6. Django实战(22):处理登录和注销

      我们已经可以在view函数中判断用户是否已经登录以及获取用户信息: if request.user.is_authenticated(): #判断用户是否已登录 user = request.user ...

    7. HBase的基础知识

      1.HBase(NoSQL:不是关系型数据库)的逻辑数据模型 HBase – Hadoop Database,是一个高可靠性.高性能.面向列.可伸缩的分布式存储系统,利用HBase技术可在廉价PC S ...

    8. python错误:UnicodeDecodeError: 'utf8' codec can't decode byte 0xe6 in position 0: unexpected end of data

      一.错误原因 在学习selenium自动化测试框架的时候,进行模仿浏览器搜索功能,输入英文是没问题,但是输入中文就报错,报错代码 def test_baidu_search(self): " ...

    9. JSTL使用

      1.标签函数库 核心标签库                 c I18N格式标签库   fmt SQL标签库  sql XML标签库  xml 函数标签库 fn 2.JSTL支持EL 二:表达式标签 ...

    10. nginx中配置文件的讲解

      一: 1.配置文件的结构 nginx由配置文件中指定的指令控制的模块组成. 指令分为简单指令和块指令. 一个简单的指令由空格分隔的名称和参数组成,并以分号(;)结尾. 块指令具有与简单指令相同的结构, ...