大家都知道Android從1.5開始剛插入SD卡時系統會調用MediaScanner服務進行後台掃描,索引新的歌曲、圖片和視頻等資訊,如果我們需要快速提取圖片和影片縮圖可以直接存取 android.provider.MediaStore.Images.Thumbnails 和android.provider.MediaStore.Video.Thumbnails這兩個資料庫,即可查詢出來縮圖
如何判斷檔案呢? 可以通過Cursor遍曆資料庫,對比INTERNAL_CONTENT_URI欄位的值,這是一個Uri我們可以轉成String,這裡儲存著Android手機SD卡上的多媒體檔案完整路徑,
有關具體的縮圖可以通過getThumbnail(ContentResolver cr, long origId, int kind, BitmapFactory.Options options) 或getThumbnail(ContentResolver cr, long origId, long groupId, int kind, BitmapFactory.Options options) 方法擷取,這兩種方法返回Bitmap類型,而縮圖的解析度可以從HEIGHT和WIDTH兩個欄位提取,在Android上縮圖分為兩種,通過讀取KIND欄位來獲得,分別為MICRO_KIND和MINI_KIND 分別為微型和迷你兩種縮減模式,前者的解析度更低。這樣我們平時擷取檔案系統的某個圖片預覽時,可以直接調用系統縮圖,而不用自己重新計算。
最後Android123提示大家,縮圖儲存在SD卡的DCIM目錄,裡面的.thumbnails是圖片的,而.video_thumbnails是視頻的,這兩個檔案夾為隱藏屬性,一般的檔案管理工具都可以看到。
從Android2.2開始系統新增了一個縮圖ThumbnailUtils類,位於framework的android.media.ThumbnailUtils位置,可以協助我們從mediaprovider中擷取系統中的視頻或圖片檔案的縮圖,該類提供了三種靜態方法可以直接調用擷取。
1. static Bitmap createVideoThumbnail(String filePath, int kind) //擷取視頻檔案的縮圖,第一個參數為視頻檔案的位置,比如/sdcard/android123.3gp,而第二個參數可以為MINI_KIND或MICRO_KIND最終和解析度有關
2. static Bitmap extractThumbnail(Bitmap source, int width, int height, int options) //直接對Bitmap進行縮減操作,最後一個參數定義為OPTIONS_RECYCLE_INPUT,來回收資源
3. static Bitmap extractThumbnail(Bitmap source, int width, int height) // 這個和上面的方法一樣,無options選項
最後Android開發網再次提醒大家,ThumbnailUtils類是API Level從8或更高才開始支援的。
作者“ljbal”