`
stephen830
  • 浏览: 2964713 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

android BitmapFactory.Options

 
阅读更多

 

public Bitmap

inBitmap

如果设置,解码选项“对象方法,采取将尝试重用这个位图加载内容时

public int

inDensity

使用的位图的象素密度

public boolean

inDither

如果抖动是真实的,解码器将尝试抖动的解码图像

public boolean

inInputShareable

此字段一起选择inPurgeable

public boolean

inJustDecodeBounds

如果设置为true,解码器将返回null位图),但输出...

public boolean

inMutable

如果设置,解码方法总是返回一个可变的位图,而不是一个一成不变的

public boolean

inPreferQualityOverSpeed

如果inPreferQualityOverSpeed​​设置为true,解码器将尝试解码重建图像以较高的质量,甚至不惜牺牲的解码速度

publicBitmap.Config

inPreferredConfig

如果非这个内部配置解码器将尝试解码

public boolean

inPurgeable

如果设置为true,则生成位图将分配给它的像素,这样它们可以被清除,如果系统需要回收内存

public int

inSampleSize

如果设置为> 1的值,要求解码器,以进行子采样的原始图像返回一个较小的图像以节省内存

public boolean

inScaled

设置了这个标志如果夏季风inTargetDensity不为0位图将进行调整,以符合inTargetDensity加载,而不是依赖每次被画布上的图形系统结垢

public int

inScreenDensity

正在被使用实际的屏幕的像素密度

public int

inTargetDensity

目的地像素密度这个位图将被吸引到

public byte[]

inTempStorage

温度存储用于解码

public boolean

mCancel

表明,取消已经这个对象调用标志

public int

outHeight

位图高度设置独立的状态inJustDecodeBounds

public String

outMimeType

如果知道,这个字符串解码后的图像的mime类型设置为

public int

outWidth

位图的宽度设置独立的状态inJustDecodeBounds

这个表格是从android sdk文档里摘出来的,简单看一下说明就明白是什么意思了。
下面我们回到我们的主题上来:怎样获取图片的大小?
思路很简单:
首先我们把这个图片转成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了。
示例代码如下:

  1. BitmapFactory.Options options = new BitmapFactory.Options();
  2. options.inJustDecodeBounds = true;
  3. Bitmap bmp = BitmapFactory.decodeFile(path, options);
  4. /* 这里返回的bmp是null */

复制代码

这段代码之后,options.outWidth 和 options.outHeight就是我们想要的宽和高了。

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

  1. /* 计算得到图片的高度 */
  2. /* 这里需要主意,如果你需要更高的精度来保证图片不变形的话,需要自己进行一下数学运算 */
  3. int height = options.outHeight * 200 / options.outWidth;
  4. options.outWidth = 200;
  5. options.outHeight = height; 
  6. /* 这样才能真正的返回一个Bitmap给你 */
  7. options.inJustDecodeBounds = false;
  8. Bitmap bmp = BitmapFactory.decodeFile(path, options);
  9. image.setImageBitmap(bmp);

复制代码

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

  1. inSampleSize = options.outWidth / 200;

另外,为了节约内存我们还可以使用下面的几个字段:

  1. options.inPreferredConfig = Bitmap.Config.ARGB_4444;    // 默认是Bitmap.Config.ARGB_8888
  2. /* 下面两个字段需要组合使用 */
  3. options.inPurgeable = true;
  4. options.inInputShareable = true;

 

 

 

分享到:
评论

相关推荐

    android BitmapFactory.Options使用方法详解

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

    Android 使用内置的Camera应用程序捕获图像

    要注意的是首先应将BitmapFactoryOptions.inJustDecodeBounds变量设置为true,这将通知BitmapFactory类只需返回该图像的范围,而无需尝试解码图像本身。最后将BitmapFactory.Options.inJustDecodeBounds设置为false,...

    android 调用相机显示拍摄后的图片

    options.inJustDecodeBounds=true; BitmapFactory.decodeStream(getContentResolver().openInputStream(uri), null, options); options.inSampleSize=4; options.inJustDecodeBounds=false; Bitmap map=...

    avatar-android-可生成圆形、方形、及方形的组合头像.zip

    options.inMutable = false; Bitmap avatar = BitmapFactory.decodeResource(getResources(), R.drawable.avatar, options); //圆形的 Drawable roundedAvatarDrawable = avatarDrawableFactory....

    Android加载图片内存溢出问题解决方法

    在将图片转换成Bitmap的时候,由于图片的大小不一样,当遇到很大的图片的时候会出现超出内存的问题,为了解决这个问题Android API提供了BitmapFactory.Options这个类. 2. 由于Android对图片使用内存有限制,若是...

    android获取照片的快照 思路及实现方法

    1.首先解析出图片文件(注意在这里为了节约内存将inJustDecodeBounds设为true,这样的话解析的图片的话只有图片的尺寸大小信息) 代码如下:BitmapFactory.Options bmpFactoryOptions = new BitmapFactory.Options();...

    ScaleImageView

    BitmapFactory.Options tempOptions = new BitmapFactory.Options(); tempOptions.inJestDecodeBounds = true; BitmapFactory.decodeSteam(is, null, tempOptions); int imageWidth = tempOptions.outWidth; int ...

    Android Bitmap的加载优化与Cache相关介绍

    一 . 高效加载 Bitmap ...BitMapFactory.options 就可以按照一定的采样率来加载缩小后的图片,将缩小后的图片置于 ImageView 中显示。 通过采样率即可高效的加载图片,遵循如下方式获取采样率: 将 BitmapFact

    android加载大图

    主要是利用BitmapFactory.Options对象的inSampleSize参数,根据空间尺寸与大图尺寸的比率来缩小大图,从而显示大图的缩略图。 二、局部加载大图 主要利用BitmapRegionDecoder类的decodeRegion方法来加载局部区域,...

    BitmapFactoryCompat:Android BitmapFactory兼容库,用于低于KitKat的重用尺寸不匹配位图

    从Andorid API级别11(蜂窝)开始,BitmapFactory在解码位图时提供重用机制:如果设置了BitmapFactory.Options.inBitmap,则采用Options对象的解码方法将在加载内容时尝试重用此位图。 从KITKAT开始,BitmapFactory...

    Android实现图片压缩示例代码

    核心思想是通过BitmapFactory.Options来缩放图片,主要是用到了它的inSampleSize参数(采样率) 当inSampleSize为1的时候,采样后的图片大小为图片的原始大小; 当inSampleSize为2的时候,采样后的图片的宽和高是...

    图片缓存机制代码

    System.out.println("inSamPle:"+options.inSampleSize); options.inJustDecodeBounds =false; //图片的质量 options.inPreferredConfig = Bitmap.Config.ARGB_4444; //内存上的处理 可删除 options....

    Android代码-android

    android ...BitmapFactoryOptionsBuilder - utility class to create BitmapFactory.Options using the builder pattern. PaintBuilder - utility class to create a Paint using the builder pattern.

    解决Android解析图片的OOM问题的方法!!!

    options.inJustDecodeBounds = false/true; //图片压缩比例. options.inSampleSize = ssize; 我们去解析一个图片,如果太大,就会OOM,我们可以设置压缩比例inSampleSize,但是这个压缩比例设置多少就是个问题,所以...

    android Bitmap用法总结

    BitmapFactory.Options option = new BitmapFactory.Options(); option.inSampleSize = 2; //将图片设为原来宽高的1/2,防止内存溢出 Bitmap bm = BitmapFactory.decodeFile("",option);//文件流 URL url = new URL...

    Android工程师面试题大全

    下面对这段时间面试遇到的问题进行整理,分享给大家供大家参考,具体内容如下 Java基础: 1、内存泄露的原因 1)、资源对象没关闭。 如Cursor、File等资源。他们会在finalize中关闭,但这样效率太低。...options.inS

    Android图片实现压缩处理的实例代码

    2.根据宽高比计算options.inSampleSize值(缩放比例 If set to a value > 1, requests the decoder to subsample the original image, returning a smaller image to save memory.)得到bitmap位图 根据位图对象获取...

    Android实现图片转高斯模糊以及高斯模糊布局

    第一个为大家介绍图片如何转高斯... BitmapFactory.Options opt = new BitmapFactory.Options(); opt.inJustDecodeBounds = true; opt.inSampleSize = 8; opt.inJustDecodeBounds = false; Bitmap bmp = BitmapFa

    android不读入内存获取图像宽高信息的方法

    options.inJustDecodeBounds = true; Bitmap bitmap = BitmapFactory.decodeFile(/sdcard/test.jpg, options); int w = options.outWidth; int h = options.outHeight; 希望本文所述对大家的Android程序设计...

Global site tag (gtag.js) - Google Analytics