public static class BitmapFactory.Options
extends Object
java.lang.Object | |
↳ | android.graphics.BitmapFactory.Options |
Fields |
|
---|---|
public Bitmap |
inBitmap 如果设置,则在加载内容时,采用Options对象的解码方法将尝试重新使用此位图。 |
public int |
inDensity 用于位图的像素密度。 |
public boolean |
inDither |
public boolean |
inInputShareable 该字段在API级别21中已被弃用。从 |
public boolean |
inJustDecodeBounds 如果设置为true,解码器将返回空(无位图),但出... |
public boolean |
inMutable 如果设置,解码方法将始终返回一个可变的位图而不是不可变的位图。 |
public boolean |
inPreferQualityOverSpeed 该字段在API级别24中已被弃用。从 |
public Bitmap.Config |
inPreferredConfig 如果这是非空的,则解码器将尝试解码为该内部配置。 |
public boolean |
inPremultiplied 如果为true(这是默认值),则生成的位图的颜色通道将由alpha通道预先倍增。 |
public boolean |
inPurgeable 该字段在API级别21中已被弃用。从 为了进行重新解码,位图必须能够访问编码数据,或者通过共享对输入的引用或复制它。 这个区别由inInputShareable控制。 如果这是真的,那么位图可以保持对输入的浅参考。 如果这是错误的,那么位图将显式地复制输入数据,并保留它。 即使允许共享,实现仍可能决定对输入数据进行深层复制。 虽然inPurgeable可以帮助避免大Dalvik堆分配(从API级别11开始),但它牺牲了性能可预测性,因为视图系统尝试绘制的任何图像都可能导致解码延迟,从而导致丢帧。 因此,大多数应用程序应该避免使用inPurgeable来实现快速流畅的用户界面。 为了最小化Dalvik堆分配,请改用 注意:与 |
public int |
inSampleSize 如果设置为大于1的值,则请求解码器对原始图像进行二次采样,返回较小的图像以节省存储空间。 |
public boolean |
inScaled 设置此标志时,如果 |
public int |
inScreenDensity 正在使用的实际屏幕的像素密度。 |
public int |
inTargetDensity 该位图的目标的像素密度将被绘制到。 |
public byte[] |
inTempStorage 临时存储用于解码。 |
public boolean |
mCancel 此字段在API级别24中已弃用。从 |
public int |
outHeight 由此产生的位图高度。 |
public String |
outMimeType 如果已知,则将该字符串设置为解码图像的mimetype。 |
public int |
outWidth 由此产生的位图宽度。 |
Public constructors |
|
---|---|
BitmapFactory.Options() 创建一个默认的Options对象,如果保持不变,将会给解码器提供相同的结果,就像null传递一样。 |
Public methods |
|
---|---|
void |
requestCancelDecode() 此方法在API级别24中已弃用。从 |
Inherited methods |
|
---|---|
From class java.lang.Object
|
Bitmap inBitmap
如果设置,则在加载内容时,采用Options对象的解码方法将尝试重新使用此位图。 如果解码操作无法使用此位图,则解码方法将返回null
,并将引发IllegalArgumentException。 当前的实现需要重用的位图是可变的,并且即使解码通常会导致不可变的位图的资源,所得到的重用位图也将继续保持可变。
由于上面列出的约束和可能发生的故障情况,您仍应始终使用解码方法的返回位图,并且不要认为重用了位图。 检查返回值是否与Options结构中设置的inBitmap的值相匹配,将指示位图是否被重用,但是在所有情况下,应使用解码函数返回的位图来确保您使用的位图用作解码目的地。
作为KITKAT
,任何可变的位图可以通过重复使用BitmapFactory
到只要任何其它的位图进行解码所得到的byte count
解码的位图的是小于或等于allocated byte count
重用位图。 这可能是因为固有尺寸较小,或尺寸缩放后(密度/样本尺寸)较小。
在KITKAT
之前, KITKAT
其他限制条件:正在解码的图像(无论是作为资源还是作为流)必须采用jpeg或png格式。 只支持相同大小的位图,并且inSampleSize
设置为1.此外,如果设置,则重用位图的configuration
将覆盖设置inPreferredConfig
。
BitmapRegionDecoder会将其请求的内容绘制到所提供的位图中,如果输出内容大小(缩放后)大于提供的位图,则进行裁剪。 提供的位图的宽度,高度和Bitmap.Config
将不会更改。
在inBitmap
中引入了JELLY_BEAN
BitmapRegionDecoder支持。 所有格式通过由BitmapRegionDecoder支持位图重用支持inBitmap
。
int inDensity
用于位图的像素密度。 这将始终导致返回的位图具有为其设置的密度(请参阅Bitmap.setDensity(int)
)。 另外,如果设置了inScaled
(默认情况下),并且此密度与inTargetDensity
不匹配,则在返回之前,位图将缩放为目标密度。
如果这是0, decodeResource(Resources, int)
decodeResource(Resources, int, android.graphics.BitmapFactory.Options)
和decodeResourceStream(Resources, TypedValue, InputStream, Rect, BitmapFactory.Options)
将填充与资源关联的密度。 其他功能将保持原样并且不会应用密度。
boolean inInputShareable
此字段在API级别21中已被弃用。
截至LOLLIPOP
,这被忽略。 在KITKAT
及以下,该字段与inPurgeable结合使用。 如果inPurgeable为false,则该字段将被忽略。 如果inPurgeable为true,那么此字段确定位图是否可以共享对输入数据(输入流,数组等)的引用,或者是否必须进行深度复制。
boolean inJustDecodeBounds
如果设置为true,解码器将返回null(无位图),但out ...字段仍将被设置,允许调用者查询位图而不必为其像素分配内存。
boolean inMutable
如果设置,解码方法将始终返回一个可变的位图而不是不可变的位图。 这可以用于例如以编程方式将效果应用于通过BitmapFactory加载的位图。
boolean inPreferQualityOverSpeed
此字段在API级别24中已被弃用。
截至N
,这被忽略。 输出将始终是高质量的。 在M
及以下版本中,如果inPreferQualityOverSpeed设置为true,则解码器将尝试将重构图像解码为更高质量,即使牺牲解码速度。 目前该领域只影响JPEG解码,在这种情况下,将使用更精确但速度稍慢的IDCT方法。
Bitmap.Config inPreferredConfig
如果这是非空的,则解码器将尝试解码为该内部配置。 如果它为空,或者请求不能满足,解码器将尝试根据系统的屏幕深度和原始图像的特征(例如它是否具有每个像素的alpha)选择最匹配的配置(需要配置一样)。 图像默认加载了ARGB_8888
配置。
boolean inPremultiplied
如果为true(这是默认值),则生成的位图的颜色通道将由alpha通道预先倍增。
对于由视图系统或通过Canvas
直接绘制的图像,这不应设置为false。 视图系统和Canvas
假定所有绘制的图像都是预乘以简化绘制时间混合,并且在绘制未预乘积时将抛出RuntimeException。
如果您想操作原始编码的图像数据,例如使用RenderScript或自定义OpenGL,这可能只会有用。
这不会影响没有Alpha通道的位图。
将 inScaled
设置为true时将此标志设置为false可能会导致不正确的颜色。
也可以看看:
boolean inPurgeable
此字段在API级别21中已被弃用。
截至LOLLIPOP
,这被忽略。 在KITKAT
及以下版本中,如果设置为true,则生成的位图将分配其像素,以便在系统需要回收内存时清除它们。 在这种情况下,当像素需要再次访问时(例如绘制位图,调用getPixels()),它们将自动重新解码。
为了进行重新解码,位图必须能够访问编码数据,或者通过共享对输入的引用或复制它。 这个区别由inInputShareable控制。 如果这是真的,那么位图可以保持对输入的浅参考。 如果这是错误的,那么位图将显式地复制输入数据,并保留它。 即使允许共享,实现仍可能决定对输入数据进行深层复制。
虽然inPurgeable可以帮助避免大Dalvik堆分配(从API级别11开始),但它牺牲了性能可预测性,因为视图系统尝试绘制的任何图像都可能导致解码延迟,从而导致丢帧。 因此,大多数应用程序应该避免使用inPurgeable来实现快速流畅的用户界面。 为了尽量减少Dalvik堆分配,请改用inBitmap
标志。
注意:与 decodeResource(Resources, int, android.graphics.BitmapFactory.Options)
或 decodeFile(String, android.graphics.BitmapFactory.Options)
一起使用时,该标志被忽略。
int inSampleSize
如果设置为大于1的值,则请求解码器对原始图像进行二次采样,返回较小的图像以节省存储空间。 样本大小是任一维度中与解码位图中的单个像素对应的像素数量。 例如,inSampleSize == 4返回的图像是原始宽度/高度的1/4,以及像素数量的1/16。 任何值<= 1的处理都与1相同。注意:解码器使用基于2的幂的最终值,任何其他值将向下舍入到最接近的2的幂。
boolean inScaled
设置此标志时,如果 inDensity
和 inTargetDensity
不为0,则加载位图时将缩放到匹配 inTargetDensity
,而不是每次绘图到Canvas时都依靠图形系统进行缩放。
BitmapRegionDecoder将忽略此标志,并且不会根据密度缩放输出。 (尽管支持inSampleSize
)
这个标志默认打开,如果你需要一个非缩放版本的位图,应该关闭。 九个补丁位图忽略这个标志并且总是缩放。
如果 inPremultiplied
设置为false,并且图像具有alpha,则将该标志设置为true可能会导致不正确的颜色。
int inScreenDensity
正在使用的实际屏幕的像素密度。 这纯粹是针对以密度兼容性代码运行的应用程序,其中inTargetDensity
实际上是应用程序所看到的密度,而不是真实的屏幕密度。
通过设置它,您可以允许加载代码避免缩放当前处于屏幕密度上升/下降到兼容性密度的位图。 相反,如果inDensity
与inScreenDensity
相同,则位图将保持原样。 任何使用结果位图的东西也必须使用Bitmap.getScaledWidth
和Bitmap.getScaledHeight
来解释位图密度和目标密度之间的差异。
这从来不会由BitmapFactory
本身为呼叫者自动设置。 它必须明确设置,因为调用者必须以密度感知的方式处理得到的位图。
int inTargetDensity
该位图的目标的像素密度将被绘制到。 这与inDensity
和inScaled
结合使用,以确定在返回之前是否以及如何缩放位图。
如果这是0, decodeResource(Resources, int)
decodeResource(Resources, int, android.graphics.BitmapFactory.Options)
和decodeResourceStream(Resources, TypedValue, InputStream, Rect, BitmapFactory.Options)
将填充与资源对象的DisplayMetrics关联的密度。 其他功能将保持原样并且不会执行密度缩放。
boolean mCancel
此字段在API级别24中已被弃用。
截至N
,请参阅有关requestCancelDecode()
评论。 标记以指示已在该对象上调用取消。 如果有一个中介希望先解码边界然后对图像进行解码,那么这非常有用。 在这种情况下,中介可以在边界解码和图像解码之间检查操作是否被取消。
int outHeight
由此产生的位图高度。 如果inJustDecodeBounds
设置为false,则在应用任何缩放后,这将是输出位图的高度。 如果为true,那么将是输入图像的高度,而不考虑缩放比例。
如果尝试解码时出错,outHeight将被设置为-1。
String outMimeType
如果已知,则将该字符串设置为解码图像的mimetype。 如果不知道,或者有错误,则将其设置为空。
int outWidth
由此产生的位图宽度。 如果inJustDecodeBounds
设置为false,那么在应用任何缩放后,这将是输出位图的宽度。 如果为真,那将是输入图像的宽度,而不考虑缩放比例。
如果尝试解码时出错,outWidth将被设置为-1。
BitmapFactory.Options ()
创建一个默认的Options对象,如果保持不变,将会给解码器提供相同的结果,就像null传递一样。
void requestCancelDecode ()
此方法在API级别24中已弃用。
从N
,这不会影响解码,尽管它仍然会设置mCancel。 在M
及以下版本中,如果可以在此选项对象位于decode ...调用中时从另一个线程调用此选项。 调用它将通知解码器它应该取消它的操作。 这不能保证取消解码,但如果解码完成,则解码器...操作将返回null,或者如果inJustDecodeBounds为true,则将将width / outHeight设置为-1