BitmapFactory.Options 详解

 

API级别1中添加

BitmapFactory.Options

public static class BitmapFactory.Options 

extends Object 

java.lang.Object继承

   ↳

android.graphics.BitmapFactory.Options

 

摘要

字段

public Bitmap

inBitmap

如果设置,则解码带有Options对象的方法将在加载内容时尝试重用此位图。

public int

inDensity

用于位图的像素密度。

public boolean

inDither

此字段在API级别24中已弃用。Build.VERSION_CODES.N从此,将忽略此字段。在Build.VERSION_CODES.M其中,如果抖动为真,则解码器将尝试抖动解码图像。

public boolean

inInputShareable

此字段在API级别21中已弃用。Build.VERSION_CODES.LOLLIPOP从此,将忽略此字段。在Build.VERSION_CODES.KITKAT该字段中,该字段与inPurgeable一起使用。如果inPurgeable为false,则忽略此字段。如果inPurgeable为true,则此字段确定位图是否可以共享对输入数据(输入流,数组等)的引用,或者是否必须进行深层复制。

public boolean

inJustDecodeBounds

如果设置为true,解码器将返回null(无位图),但是 out...

public boolean

inMutable

如果设置,解码方法将始终返回可变位图而不是不可变位图。

public boolean

inPreferQualityOverSpeed

此字段在API级别24中已弃用。Build.VERSION_CODES.N从此,将忽略此字段。输出始终是高品质的。在Build.VERSION_CODES.M其中,如果inPreferQualityOverSpeed设置为true,则解码器将尝试将重建的图像解码为更高的质量,即使以解码速度为代价。目前,该字段仅影响JPEG解码,在这种情况下,将使用更准确但稍慢的IDCT方法。

public ColorSpace

inPreferredColorSpace

如果这是非null,解码器将尝试解码到此颜色空间。

public Bitmap.Config

inPreferredConfig

如果这是非null,解码器将尝试解码到此内部配置。

public boolean

inPremultiplied

如果为true(这是默认值),则生成的位图将使其颜色通道预先乘以Alpha通道。

public boolean

inPurgeable

此字段在API级别21中已弃用。Build.VERSION_CODES.LOLLIPOP从此,将忽略此字段。在Build.VERSION_CODES.KITKAT其中,如果将此设置为true,则生成的位图将分配其像素,以便在系统需要回收内存时可以清除它们。在那种情况下,当需要再次访问像素时(例如,绘制位图,调用getPixels()),它们将被自动重新解码。

要进行重新解码,位图必须能够访问编码数据,方法是共享对输入的引用或者复制它。这种区别由inInputShareable控制。如果这是真的,那么位图可以保持对输入的浅引用。如果这是错误的,那么位图将显式地复制输入数据,并保留它。即使允许共享,实现仍可决定对输入数据进行深度复制。

虽然inPurgeable可以帮助避免大型Dalvik堆分配(从API级别11开始),但它牺牲了性能可预测性,因为视图系统尝试绘制的任何图像都可能导致解码延迟,这可能导致丢帧。因此,大多数应用程序应避免使用inPurgeable来实现快速流畅的UI。要最小化Dalvik堆分配,请使用该inBitmap标志。

注意:与BitmapFactory.decodeResource(Resources, int, android.graphics.BitmapFactory.Options)or一起使用时,将忽略此标志BitmapFactory.decodeFile(String, android.graphics.BitmapFactory.Options)

public int

inSampleSize

如果设置为> 1的值,请求解码器对原始图像进行二次采样,返回较小的图像以节省内存。

public boolean

inScaled

设置此标志时,如果inDensity且 inTargetDensity不是0,则位图将inTargetDensity在加载时进行缩放以匹配,而不是每次将其绘制到Canvas时依赖于图形系统缩放它。

public int

inScreenDensity

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

public int

inTargetDensity

此位图的目标像素密度将被绘制。

public byte[]

inTempStorage

临时存储用于解码。

public boolean

mCancel

该字段在API级别24中已弃用。截至Build.VERSION_CODES.N,请参阅评论requestCancelDecode()。用于指示已在此对象上调用cancel的标志。如果有一个中间人想先解码边界然后解码图像,这很有用。在那种情况下,中间装置可以在边界解码和图像解码之间检查操作是否被取消。

public ColorSpace

outColorSpace

如果已知,则解码的位图将具有的颜色空间。

public Bitmap.Config

outConfig

如果已知,则解码后的位图将具有配置。

public int

outHeight

由此产生的位图高度。

public String

outMimeType

如果已知,则将该字符串设置为解码图像的mimetype。

public int

outWidth

生成的位图宽度。

公共建设者

BitmapFactory.Options()

创建一个默认的Options对象,如果保持不变,将从解码器给出相同的结果,就像传递了null一样。

 

公共方法

void

requestCancelDecode()

此方法在API级别24中已弃用。此时Build.VERSION_CODES.N,这不会影响解码,但仍会设置mCancel。在Build.VERSION_CODES.M和以下,如果这个选项对象在解码...调用内,可以从另一个线程调用。调用此方法将通知解码器应取消其操作。这不能保证取消解码,但如果确实如此,解码器...操作将返回null,或者如果inJustDecodeBounds为true,则将outWidth / outHeight设置为-1

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`BitmapFactory.Options` 是一个用于配置位图加载选项的类。使用 `BitmapFactory.Options` 可以控制位图的加载方式,如缩放、解码格式、采样率等。以下是一个简单的使用示例: ```java // 加载图片的选项 BitmapFactory.Options options = new BitmapFactory.Options(); // 设置为 true,只获取图片的宽度和高度,不加载图片到内存中 options.inJustDecodeBounds = true; BitmapFactory.decodeResource(getResources(), R.drawable.my_image, options); // 计算采样率 int sampleSize = calculateInSampleSize(options, reqWidth, reqHeight); // 设置采样率 options.inSampleSize = sampleSize; // 关闭只获取图片宽度和高度的选项 options.inJustDecodeBounds = false; // 加载图片到内存中 Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.my_image, options); ``` 以上示例中,首先使用 `inJustDecodeBounds` 选项将 `BitmapFactory.decodeResource()` 方法的返回值设置为 null,并且只获取图片的宽度和高度,而不是真正地将图片加载到内存中。接着,根据目标宽度和高度计算采样率,然后将采样率设置到 `inSampleSize` 选项中。最后,关闭 `inJustDecodeBounds` 选项并重新调用 `BitmapFactory.decodeResource()` 方法来加载图片到内存中。 注意,`calculateInSampleSize()` 方法需要自己实现。它的作用是根据目标宽度和高度计算出最接近的采样率。以下是一个示例实现: ```java private static int calculateInSampleSize(BitmapFactory.Options options, int reqWidth, int reqHeight) { final int height = options.outHeight; final int width = options.outWidth; int inSampleSize = 1; if (height > reqHeight || width > reqWidth) { final int halfHeight = height / 2; final int halfWidth = width / 2; while ((halfHeight / inSampleSize) >= reqHeight && (halfWidth / inSampleSize) >= reqWidth) { inSampleSize *= 2; } } return inSampleSize; } ``` 以上示例中,`calculateInSampleSize()` 方法会根据图片的宽度和高度以及目标宽度和高度计算出最接近的采样率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值