Android 中的缩略图的加载
2016-02-16 19:40
696 查看
//Android 中的缩略图加载
/* 1、使用inJustDecodeBounds,读Bitmap的长和宽 2、根据bitmap的长宽和目标缩略图的长和宽。计算出inSampleSize的大小 3、使用inSampleSize,载入一个大一点的缩略图A 4、使用createScaseBitmap,将缩略图A,生成我们需要的缩略图B 5、回收缩略图A */ /* Notice createScaseBitmap如果原图和目标缩略图大小一致,那么不会生成一个新的Bitmap直接返回bitmap,因此,回收的时候,要判断缩略图A是否就是缩略图B,如果说是的话,不要回收 */ //代码:
public class BitmapUtils{ //计算inSampleSize的大小 private static int calculateInSampleSize(BitmapFactory.Options options,int reqWidth,int reqHeight){ 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; } //创建新的Bitmap 图片对象 private static Bitmap createScaleBitmap(Bitmap src,int dstWidth.int dstHeight){ Bitmap dst=Bitmap.createScaleBitmap(src,dstWidth,dstHeight,false); if(src!=dst){ //如果没有缩放,那么不回收 src.recycle(); //释放Bitmap的native像素数组 } return dst; } //从Resources中加载图片 public static Bitmap decodeSampleBitmapFromResource(Resource res,int resId,int reqWidth,int reqHeight){ final BitmapFactory.Options options= new BitmapFactory.Options(); options.inJustDecodeBounds = true; BitmapFactory.decodeResource(res,resId,options); //读取图片长宽 options.inSampleSize = calculateInSampleSize(options,reqWidth,reqHeight);//计算inSampleSize options.inJustDecodeBounds = false; Bitmap src = BitmapFactory.decodeResource(res,resId,options); //载入一个稍大的缩略图 return createScaleBitmap(src,reqWidht,reqHeight); //进一步得到目标大小的缩略图 } //从sd卡上加载图片 public static Bitmap decodeSampleBitmapFromFd(String pathName,int reqWidth,int reqHeight){ final BitmapFactory.Options options= new BitmapFactory.Options(); options.inJustDecodeBounds = true; BitmapFactory.decodeFile(pathName,options); //获取图片的长宽 options.inSampleSize = calculateSampleSize(options,reqWidth,reqHeight); options.inJustDecodeBounds= false; Bitmap src = BitmapFactory.decodeFile(pathName,options); return createScaleBitmap(src,reqWidth,reqHeight); } }
相关文章推荐
- android:SpannableString使用详解
- Android Studio相关配置Mac版
- 【android笔记】之 android studio (一)
- Activity生命周期详解
- Android InputStream.available()方法详解
- android java 如何判断一个url地址为有效url
- android View 绘制原理
- 理解android Matrix
- Android SQLite框架greenDAO的使用
- android 通过包名杀死进程
- Android消息机制
- Java/Android中四种引用类型
- Android - 如何获取手机内存
- Android 6.0 RuntimePermission---聊一聊Android 6.0的运行时权限
- Android 涂鸦最佳实践
- Android RecyclerView——总结自DavidSmith的视频
- SwipeRefreshLayout的升级版RefreshLayout
- Android内存优化之OOM
- Android 简单设置Activity为dialog样式
- Android中JNI的使用