BitmapFactory之高效加载Bitmap图片.
- decodeByteArray(byte[] data, int offset,int length):从指定字节数组的offset位置开始,将长度为length的字节数据解析成Bitmap对象.
- decodeFIle(String pathName):从pathName指定的文件中解析 , 创建Bitmap对象.
- decodeFileDescriptor(FileDescriptor fd):用于从FileDescriptor对应的文件中解析 , 创建Bitmap对象.
- decodeResource(Resource res,int id):用于根据给定的资源ID从指定的资源文件中解析 , 创建Bitmap对象.
- decodeStream(InputStream is):用于从指定输入流中介解析 , 创建Bitmap对象.
If set to true, the decoder will return null (no bitmap), but the out…
也就是说,如果我们把它设为true , 那么BitmapFactory.decodeFile(String path, Options opt)并不会真的返回一个Bitmap给你 , 它仅仅会把它的宽和高取回来给你 , 这样就不会占用太多的内存 , 并且我们也需要适时的回收对象 , 利用下方代码:
if(!bitmap.isRecycled()){
bitmap.recycle(); //回收图片所占的内存
System.gc(); //提醒系统及时回收
} 及时回收,就不会那么频繁的发生OOM了,也提高了Bitmap加载时的性能.public class BitMapUtils {
//高效加载BitMap
public static Bitmap decodeSampleBitmapFormResource(Resources resources, int resourcesId, int reqWidth, int reqHeight){
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeResource(resources,resourcesId,options);
options.inSampleSize = caculateInSampleSize(options,resourcesId,reqHeight,reqWidth);
options.inJustDecodeBounds = false;
return BitmapFactory.decodeResource(resources,resourcesId,options);
}
private static int caculateInSampleSize(BitmapFactory.Options options, int resourcesId, int reqHeight,int reqWidth) {
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;
}
}mImageView.setImageBitmap(BitMapUtils.decodeSampleBitmapFormResource(this.getResources(),R.drawable.icon,100,100));
4万+



被折叠的 条评论
为什么被折叠?



