Bitmap加载选项:BitmapFactory.Options
1、BitmapFactory.Options
BitmapFactory.Options是BitmapFactory加载Bitmap用到的选项配置,用于解码Bitmap的时设置各种参数选项。BitmapFactory的使用参考BitmapFactory详解。
2、重要属性
BitmapFactory.Options类有很多public成员变量,用于设置重要的属性。
2.1、injustDecodeBounds
设为true,那么BitmapFactory并不会真的返回一个Bitmap。但Bitmap的outWidth、outHeight等属性将会初始化,这样就不会占用太多内存,也就就可以避免直接加载较大的图片而发生OOM。一般用来先查询图片的宽、高,再计算另一个重要的属性inSampleSize。
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;2.2、inSampleSize
图像采样率,图片太大时,通过设置采样率,压缩图片。有现成的通用方法计算采样率:
inSampleSize>1时,图像高、宽分别以的1/inSampleSize²缩小
inSampleSize ≤ 1时,图像高、宽不变
/**
* 计算采样率
*
* @param options 获取图片的边界信息
* @param requestWidth View的宽度
* @param requestHeight View的高度
* @return int 返回Bitmap采样率
*/
public static int calculateInSampleSize(BitmapFactory.Options options, int requestWidth, int requestHeight) {
//获取图片的真实的宽高
int width = options.outWidth;
int height = options.outHeight;
//默认 1 1代表不对图片进行任何压缩
int inSampleSize = 1;
options.inSampleSize = inSampleSize;
//计算采样率
if (width > requestWidth || height > requestHeight) {
int halfWidth = width / 2;
int halfHeight = height / 2;
while ((halfWidth / inSampleSize) >= requestWidth &&
(halfHeight / inSampleSize) >= requestHeight) {
//计算采样率
inSampleSize *= 2;
}
}
return inSampleSize;
}2.3、outWidth & outHeight
Bitmap图像的宽和高。
2.4、inPreferredConfig
色彩模式,默认值Bitmap.Config.ARGB_8888。一个像素点占用4bytes空间,比较占用内存的一种色彩模式,但是支持ARGB透明度的图像,适合加载.png位图。
public Bitmap.Config inPreferredConfig = Bitmap.Config.ARGB_8888;Bitmap.Config枚举中还定义了其它几种色彩模式,另见Bitmap位图介绍第1.2节。
public enum Config {
ALPHA_8 (1),
RGB_565 (3),
@Deprecated
ARGB_4444 (4),
ARGB_8888 (5),
RGBA_F16 (6),
HARDWARE (7);
}2.5、inPremultiplied
①如果设置了true(默认是true),那么返回的图片RGB都会预乘透明通道A后的颜色
②系统View或者Canvas绘制图片,不建议设置为fase,否则会抛出异常,这是因为系统会假定所有图像都预乘A通道的已简化绘制时间.
③设置inPremultiplied的同时,设置inScale会导致绘制的颜色不正确
2.6、inDither
设置是否抖动处理图片。
2.7、inDensity
设置Bitmap位图的像素密度,即每英寸有多少个像素。对应DisplayMetrics中的densityDpi。
2.8、inTargetDensity
设置绘制位图的屏幕密度,与inScale和inDesity一起使用,来对位图进行放缩。
2.9、inScreenDensity
使用的实际屏幕的像素密度。对应DisplayMetrics中的densityDpi。
2.10、inScaled
Bitmap是否可以缩放,默认值true,可以被缩放。
注:inDesity, inTargetDensity,inScreenDensity这三个参数主是确定是否需要对bitmap进行缩放处理,如果缩放,缩放后的W和H应该是多少,缩放比例主要是通过:InTargetDenisity/inDensity作为缩放比例。
2.11、inPreferQualityOverSpeed
这个值表示是否在解码时图片有更高的品质,仅用于JPEG格式。如果设置为true,则图片会有更高的品质,但是会解码速度会很慢。
2.12、inPurgeable & inInputShareable*
Android 5.0以后已经弃用该字段。Android 4.4及以下版本中,如果将其设置为true,则生成的位图将分配其像素,以便在系统需要回收内存时可以将其清除。 在那种情况下,当需要再次访问像素时(例如绘制位图,调用getPixels()),它们将被自动重新解码。
参考文献:
Android中BitmapFactory.Options详解
图片基础知识梳理(1) - ImageView 的 ScaleType 属性解析

