圖片管理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<String, Bitmap> 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<String, Bitmap>(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 }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章