`
stephen830
  • 浏览: 3010192 次
  • 性别: 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使用方法详解

    int height = options.outHeight * 200 / options.outWidth; options.outWidth = 200; options.outHeight = height; options.inJustDecodeBounds = false; options.inSampleSize = options.outWidth / 200; Bitmap ...

    BitmapFactory.Options

    BitmapFactory.Options是Android系统中处理图像资源的核心类之一,它在`android.graphics.BitmapFactory`包中,用于控制Bitmap对象的创建过程。这个类提供了多种选项和设置,可以帮助开发者优化内存使用,提高应用...

    处理bitmap内存溢出问题

    BitmapFactory.Options opts = new BitmapFactory.Options(); opts.inSampleSize = 4; Bitmap bitmap = BitmapFactory.decodeFile(imageFile, opts); ``` 在这个例子中,`inSampleSize`被设置为4,这意味着原始图像...

    Android有效解决加载大图片时内存溢出的问题

    options.inJustDecodeBounds = false; options.inSampleSize = 10; // 缩放图片 Bitmap btp = BitmapFactory.decodeStream(is, null, options); ``` 二、使用 recycle() 方法 在加载大图片时,使用 recycle() 方法...

    Matrix与Option比较

    在处理图片时,我们常常会遇到两种主要的图片操作方法:Matrix和BitmapFactory.Options。这两种方法在处理图像时各有其特点和适用场景,理解它们的差异有助于优化图片加载和显示,从而提升应用性能。 首先,我们来...

    android缩放图片代码实例

    options.inSampleSize = 2; Bitmap bitmap = BitmapFactory.decodeFile(filePath, options); ``` ### 3. 内存优化策略 #### 3.1 使用合适的图片格式 选择正确的图片格式对于节省内存至关重要。通常,PNG适用于有...

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

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

    Android下利用Bitmap切割图片

    同时,可以使用BitmapFactory.Options配置来降低解码时的内存消耗,例如设置inSampleSize来控制图片的解码比例。 总结来说,Android中的Bitmap提供了强大的图片处理能力,包括切割、缩放、绘制等操作。通过合理使用...

    android_内存溢出处理

    options.inSampleSize = 2; ``` 通过设置 inSampleSize 属性可以缩放图片的大小,从而避免了内存溢出。 解决 Android 内存溢出处理问题需要从多方面入手,包括优化 Dalvik 虚拟机的堆内存分配、手动干涉 GC 处理、...

    android bitmap图片压缩

    options.inJustDecodeBounds = true; // 先获取原图尺寸,不加载到内存 BitmapFactory.decodeResource(getResources(), R.drawable.my_image, options); int width = options.outWidth; int height = options....

    Android Bitmap的加载与缓存

    options.inSampleSize = calculateSampleSize(targetSize, options.outWidth, options.outHeight); options.inJustDecodeBounds = false; // 开始加载图片 return BitmapFactory.decodeByteArray(data, 0, data....

    android有效解决图片过大内存溢出的问题

    options.inJustDecodeBounds = false; options.inSampleSize = 10; // 缩小宽高至原来的十分之一 Bitmap btp = BitmapFactory.decodeStream(is, null, options); ``` 2. **设置合适的`Bitmap.Config`** - **...

    android图片缩放

    int be = (int)(options.outHeight / (float)200); if (be ) { be = 1; } options.inSampleSize = be; ``` 4. **设置`inJustDecodeBounds`为`false`并重新解码图片**:设置`inJustDecodeBounds`为`false`后,...

    android 图片压缩 demo

    compressedBitmap.compress(Bitmap.CompressFormat.JPEG, options.inQuality, new FileOutputStream(outputFilePath)); ``` 综上所述,"android 图片压缩 demo"项目主要涉及到Android平台上的图片压缩技术,包括...

    加载大图片的时候如何防止内存溢出

    防止内存溢出的关键是了解 Android 加载图片的机制,并掌握一些防止内存溢出的技巧,如使用 BitmapFactory.Options 对图片进行压缩,运用 Java 软引用进行图片缓存,及时回收图片所占的内存等。只有这样,我们才能在...

    android bitmap通过byte数组以流的形式创建

    options.inSampleSize = calculateInSampleSize(originalWidth, originalHeight, desiredWidth, desiredHeight); // 计算缩放比例 options.inJustDecodeBounds = false; // 开始实际解码 ``` 3. **计算缩放比例**:...

    android处理图片内存溢出VM.pdf

    BitmapFactory.Options opts = new BitmapFactory.Options(); opts.inJustDecodeBounds = true; BitmapFactory.decodeFile(imageFile, opts); // 根据图片的原始宽度和高度以及期望的最大像素数计算合适的 ...

    Android对图片的压缩读取和保存

    - 示例用法:`options.inJustDecodeBounds = true;` 2. **inSampleSize**: 控制解码后的图片大小。若值为2,则最终图片的宽度和高度均为原图的1/2;若值为3,则宽度和高度均为原图的1/3。以此类推。 - 示例用法:...

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

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

Global site tag (gtag.js) - Google Analytics