Most visited

Recently visited

Added in API level 1

BitmapFactory.Options

public static class BitmapFactory.Options
extends Object

java.lang.Object
   ↳ android.graphics.BitmapFactory.Options


Summary

Fields

public Bitmap inBitmap

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

public int inDensity

用于位图的像素密度。

public boolean inDither

该字段在API级别24中已被弃用。从N ,这被忽略。 在M及以下,如果抖动为真,则解码器将尝试抖动解码图像。

public boolean inInputShareable

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

public boolean inJustDecodeBounds

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

public boolean inMutable

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

public boolean inPreferQualityOverSpeed

该字段在API级别24中已被弃用。从N ,这被忽略。 输出将始终是高质量的。 在M及以下版本中,如果inPreferQualityOverSpeed设置为true,则解码器将尝试将重构图像解码为更高质量,即使牺牲解码速度。 目前该领域只影响JPEG解码,在这种情况下,将使用更精确但速度稍慢的IDCT方法。

public Bitmap.Config inPreferredConfig

如果这是非空的,则解码器将尝试解码为该内部配置。

public boolean inPremultiplied

如果为true(这是默认值),则生成的位图的颜色通道将由alpha通道预先倍增。

public 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)一起使用时,该标志被忽略。

public int inSampleSize

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

public boolean inScaled

设置此标志时,如果 inDensity和 inTargetDensity不为0,则加载位图时将缩放到匹配 inTargetDensity ,而不是每次将图形系统绘制到画布时依靠图形系统进行缩放。

public int inScreenDensity

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

public int inTargetDensity

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

public byte[] inTempStorage

临时存储用于解码。

public boolean mCancel

此字段在API级别24中已弃用。从N ,请参阅requestCancelDecode()上的requestCancelDecode() 。 标记以指示已在该对象上调用取消。 如果有一个中介希望先解码边界然后对图像进行解码,那么这非常有用。 在这种情况下,中介可以在边界解码和图像解码之间检查操作是否被取消。

public int outHeight

由此产生的位图高度。

public String outMimeType

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

public int outWidth

由此产生的位图宽度。

Public constructors

BitmapFactory.Options()

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

Public methods

void requestCancelDecode()

此方法在API级别24中已弃用。从N ,这不会影响解码,尽管它仍会设置mCancel。 在M及以下,如果这个可以从另一个线程中调用,而这个选项对象在decode ...调用中。 调用它会通知解码器它应该取消它的操作。 这不能保证取消解码,但如果解码完成,则解码器...操作将返回null,或者如果inJustDecodeBounds为true,则将将width / outHeight设置为-1

Inherited methods

From class java.lang.Object

Fields

inBitmap

Added in API level 11
Bitmap inBitmap

如果设置,则在加载内容时,采用Options对象的解码方法将尝试重新使用此位图。 如果解码操作无法使用此位图,则解码方法将返回null ,并将引发IllegalArgumentException。 当前的实现需要重用的位图是可变的,并且即使解码通常会导致不可变的位图的资源,所得到的重用位图也将继续保持可变。

由于上面列出的约束和可能发生的故障情况,您仍应始终使用解码方法的返回位图,并且不要认为重用了位图。 检查返回值是否与Options结构中设置的inBitmap的值相匹配,将指示位图是否被重用,但是在所有情况下,应使用解码函数返回的位图来确保您使用的位图用作解码目的地。

Usage with BitmapFactory

作为KITKAT ,任何可变的位图可以通过重复使用BitmapFactory到只要任何其它的位图进行解码所得到的byte count解码的位图的是小于或等于allocated byte count重用位图。 这可能是因为固有尺寸较小,或尺寸缩放后(密度/样本尺寸)较小。

在KITKAT之前, KITKAT其他限制条件:正在解码的图像(无论是作为资源还是作为流)必须采用jpeg或png格式。 只支持相同大小的位图,并且inSampleSize设置为1.此外,如果设置,则重用位图的configuration将覆盖设置inPreferredConfig 。

Usage with BitmapRegionDecoder

BitmapRegionDecoder会将其请求的内容绘制到所提供的位图中,如果输出内容大小(缩放后)大于提供的位图,则进行裁剪。 提供的位图的宽度,高度和Bitmap.Config将不会更改。

在inBitmap中引入了JELLY_BEAN BitmapRegionDecoder支持。 所有格式通过由BitmapRegionDecoder支持位图重用支持inBitmap 。

也可以看看:

inDensity

Added in API level 4
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)将填充与资源关联的密度。 其他功能将保持原样并且不会应用密度。

也可以看看:

inDither

Added in API level 1
boolean inDither

此字段在API级别24中已被弃用。
截至N ,这被忽略。 在M及以下,如果抖动为真,则解码器将尝试抖动解码图像。

inInputShareable

Added in API level 4
boolean inInputShareable

此字段在API级别21中已被弃用。
截至LOLLIPOP ,这被忽略。 在KITKAT及以下,该字段与inPurgeable结合使用。 如果inPurgeable为false,则该字段将被忽略。 如果inPurgeable为true,那么此字段确定位图是否可以共享对输入数据(输入流,数组等)的引用,或者是否必须进行深度复制。

inJustDecodeBounds

Added in API level 1
boolean inJustDecodeBounds

如果设置为true,解码器将返回null(无位图),但out ...字段仍将被设置,允许调用者查询位图而不必为其像素分配内存。

inMutable

Added in API level 11
boolean inMutable

如果设置,解码方法将始终返回一个可变的位图而不是不可变的位图。 这可以用于例如以编程方式将效果应用于通过BitmapFactory加载的位图。

inPreferQualityOverSpeed

Added in API level 10
boolean inPreferQualityOverSpeed

此字段在API级别24中已被弃用。
截至N ,这被忽略。 输出将始终是高质量的。 在M及以下版本中,如果inPreferQualityOverSpeed设置为true,则解码器将尝试将重构图像解码为更高质量,即使牺牲解码速度。 目前该领域只影响JPEG解码,在这种情况下,将使用更精确但速度稍慢的IDCT方法。

inPreferredConfig

Added in API level 1
Bitmap.Config inPreferredConfig

如果这是非空的,则解码器将尝试解码为该内部配置。 如果它为空,或者请求不能满足,解码器将尝试根据系统的屏幕深度和原始图像的特征(例如它是否具有每个像素的alpha)选择最匹配的配置(需要配置一样)。 图像默认加载了ARGB_8888配置。

inPremultiplied

Added in API level 19
boolean inPremultiplied

如果为true(这是默认值),则生成的位图的颜色通道将由alpha通道预先倍增。

对于由视图系统或通过Canvas直接绘制的图像,这不应设置为false。 视图系统和Canvas假定所有绘制的图像都是预乘以简化绘制时间混合,并且在绘制未预乘积时将抛出RuntimeException。

如果您想操作原始编码的图像数据,例如使用RenderScript或自定义OpenGL,这可能只会有用。

这不会影响没有Alpha通道的位图。

将 inScaled设置为true时将此标志设置为false可能会导致不正确的颜色。

也可以看看:

inPurgeable

Added in API level 4
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)一起使用时,该标志被忽略。

inSampleSize

Added in API level 1
int inSampleSize

如果设置为大于1的值,则请求解码器对原始图像进行二次采样,返回较小的图像以节省存储空间。 样本大小是任一维度中与解码位图中的单个像素对应的像素数量。 例如,inSampleSize == 4返回的图像是原始宽度/高度的1/4,以及像素数量的1/16。 任何值<= 1的处理都与1相同。注意:解码器使用基于2的幂的最终值,任何其他值将向下舍入到最接近的2的幂。

inScaled

Added in API level 4
boolean inScaled

设置此标志时,如果 inDensity和 inTargetDensity不为0,则加载位图时将缩放到匹配 inTargetDensity ,而不是每次绘图到Canvas时都依靠图形系统进行缩放。

BitmapRegionDecoder将忽略此标志,并且不会根据密度缩放输出。 (尽管支持inSampleSize )

这个标志默认打开,如果你需要一个非缩放版本的位图,应该关闭。 九个补丁位图忽略这个标志并且总是缩放。

如果 inPremultiplied设置为false,并且图像具有alpha,则将该标志设置为true可能会导致不正确的颜色。

inScreenDensity

Added in API level 4
int inScreenDensity

正在使用的实际屏幕的像素密度。 这纯粹是针对以密度兼容性代码运行的应用程序,其中inTargetDensity实际上是应用程序所看到的密度,而不是真实的屏幕密度。

通过设置它,您可以允许加载代码避免缩放当前处于屏幕密度上升/下降到兼容性密度的位图。 相反,如果inDensity与inScreenDensity相同,则位图将保持原样。 任何使用结果位图的东西也必须使用Bitmap.getScaledWidth和Bitmap.getScaledHeight来解释位图密度和目标密度之间的差异。

这从来不会由BitmapFactory本身为呼叫者自动设置。 它必须明确设置,因为调用者必须以密度感知的方式处理得到的位图。

也可以看看:

inTargetDensity

Added in API level 4
int inTargetDensity

该位图的目标的像素密度将被绘制到。 这与inDensity和inScaled结合使用,以确定在返回之前是否以及如何缩放位图。

如果这是0, decodeResource(Resources, int) decodeResource(Resources, int, android.graphics.BitmapFactory.Options)和decodeResourceStream(Resources, TypedValue, InputStream, Rect, BitmapFactory.Options)将填充与资源对象的DisplayMetrics关联的密度。 其他功能将保持原样并且不会执行密度缩放。

也可以看看:

inTempStorage

Added in API level 1
byte[] inTempStorage

临时存储用于解码。 建议16K左右。

mCancel

Added in API level 1
boolean mCancel

此字段在API级别24中已被弃用。
截至N ,请参阅有关requestCancelDecode()评论。 标记以指示已在该对象上调用取消。 如果有一个中介希望先解码边界然后对图像进行解码,那么这非常有用。 在这种情况下,中介可以在边界解码和图像解码之间检查操作是否被取消。

outHeight

Added in API level 1
int outHeight

由此产生的位图高度。 如果inJustDecodeBounds设置为false,则在应用任何缩放后,这将是输出位图的高度。 如果为true,那么将是输入图像的高度,而不考虑缩放比例。

如果尝试解码时出错,outHeight将被设置为-1。

outMimeType

Added in API level 1
String outMimeType

如果已知,则将该字符串设置为解码图像的mimetype。 如果不知道,或者有错误,则将其设置为空。

outWidth

Added in API level 1
int outWidth

由此产生的位图宽度。 如果inJustDecodeBounds设置为false,那么在应用任何缩放后,这将是输出位图的宽度。 如果为真,那将是输入图像的宽度,而不考虑缩放比例。

如果尝试解码时出错,outWidth将被设置为-1。

Public constructors

BitmapFactory.Options

Added in API level 1
BitmapFactory.Options ()

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

Public methods

requestCancelDecode

Added in API level 1
void requestCancelDecode ()

此方法在API级别24中已弃用。
从N ,这不会影响解码,尽管它仍然会设置mCancel。 在M及以下版本中,如果可以在此选项对象位于decode ...调用中时从另一个线程调用此选项。 调用它将通知解码器它应该取消它的操作。 这不能保证取消解码,但如果解码完成,则解码器...操作将返回null,或者如果inJustDecodeBounds为true,则将将width / outHeight设置为-1

Hooray!