图片管理Android工具类


  • 一个对图片进行管理的Android工具类,包括了对下载好的图片进行下缓存,获取ImageLoader的实例,将一张图片存储到LruCache中,从LruCache中获取一张图片,获取图片大小,计算inSampleSize值,使用获取到的inSampleSize值再次解析图片等,是Android图像处理的常用类,发上来供参考吧:

    01 package com.example.photowallfallsdemo;
    02 import android.graphics.Bitmap;
    03 import android.graphics.BitmapFactory;
    04 import android.util.LruCache;
    05 /*对图片进行管理的工具类。
    06  * @author Tony
    07  */
    08 public class ImageLoader {
    09  
    10     /*图片缓存技术的核心类,用于缓存所有下载好的图片,在程序内存达到设定值时会将最少最近使用的图片移除掉。*/
    11     private static LruCache mMemoryCache;
    12  
    13     /*ImageLoader的实例。*/
    14     private static ImageLoader mImageLoader;
    15     private ImageLoader() {
    16         // 获取应用程序最大可用内存
    17         int maxMemory = (int) Runtime.getRuntime().maxMemory();
    18         int cacheSize = maxMemory / 8;
    19         // 设置图片缓存大小为程序最大可用内存的1/8
    20         mMemoryCache = new LruCache(cacheSize) {
    21             @Override
    22             protected int sizeOf(String key, Bitmap bitmap) {
    23                 return bitmap.getByteCount();
    24             }
    25         };
    26     }
    27     /**
    28      * 获取ImageLoader的实例。
    29      * @return ImageLoader的实例。
    30      */
    31     public static ImageLoader getInstance() {
    32         if (mImageLoader == null) {
    33             mImageLoader = new ImageLoader();
    34         }
    35         return mImageLoader;
    36     }
    37  
    38     /**
    39      * 将一张图片存储到LruCache中。
    40      * @param key
    41      *            LruCache的键,这里传入图片的URL地址。
    42      * @param bitmap
    43      *            LruCache的键,这里传入从网络上下载的Bitmap对象。
    44      */
    45     public void addBitmapToMemoryCache(String key, Bitmap bitmap) {
    46         if (getBitmapFromMemoryCache(key) == null) {
    47             mMemoryCache.put(key, bitmap);
    48         }
    49     }
    50  
    51     /**
    52      * 从LruCache中获取一张图片,如果不存在就返回null。
    53      * @param key
    54      *            LruCache的键,这里传入图片的URL地址。
    55      * @return 对应传入键的Bitmap对象,或者null。
    56      */
    57     public Bitmap getBitmapFromMemoryCache(String key) {
    58         return mMemoryCache.get(key);
    59     }
    60  
    61     public static int calculateInSampleSize(BitmapFactory.Options options,
    62             int reqWidth) {
    63         // 源图片的宽度
    64         final int width = options.outWidth;
    65         int inSampleSize = 1;
    66         if (width > reqWidth) {
    67             // 计算出实际宽度和目标宽度的比率
    68             final int widthRatio = Math.round((float) width / (float) reqWidth);
    69             inSampleSize = widthRatio;
    70         }
    71         return inSampleSize;
    72     }
    73  
    74     public static Bitmap decodeSampledBitmapFromResource(String pathName,
    75             int reqWidth) {
    76         // 第一次解析将inJustDecodeBounds设置为true,来获取图片大小
    77         final BitmapFactory.Options options = new BitmapFactory.Options();
    78         options.inJustDecodeBounds = true;
    79         BitmapFactory.decodeFile(pathName, options);
    80         // 调用上面定义的方法计算inSampleSize值
    81         options.inSampleSize = calculateInSampleSize(options, reqWidth);
    82         // 使用获取到的inSampleSize值再次解析图片
    83         options.inJustDecodeBounds = false;
    84         return BitmapFactory.decodeFile(pathName, options);
    85     }
    86 }

你可能感兴趣的:(移动管理)