BitmapFactory.Options 详解

本文深入解析BitmapFactory.Options类,详细介绍了其字段如inBitmap、inDensity、inDither等的功能与使用场景,以及如何通过这些选项优化图像解码过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值