天天看點

android 擷取本地圖檔的縮略圖,Android擷取本地視訊縮略圖的幾種方法

記錄一下:

1.使用MediaMetadataRetriever擷取Bitmap:

較占記憶體

MediaMetadataRetriever media = new MediaMetadataRetriever();

media.setDataSource(videoPath);

Bitmap bitmap = media.getFrameAtTime();

2.使用ThumbnailUtils類擷取Bitmap:

需要Android 2.2以後,也較占記憶體

Bitmap bitmap = ThumbnailUtils.createVideoThumbnail(videoPath, Thumbnails.MICRO_KIND);

//Bitmap bitmap = ThumbnailUtils.extractThumbnail(bitmap, width, height, ThumbnailUtils.OPTIONS_RECYCLE_INPUT);

3.從媒體庫中查詢:

不是很穩定而且有新視訊的時候要通知系統重新掃描

Cursor cursor = getContentResolver().query(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, null, MediaStore.Video.Media.ALBUM + "=?", new String[]{Constants.DIRECTORY_VIDEO}, MediaStore.Video.Media.DEFAULT_SORT_ORDER);

try {

for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) {

int id = cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Video.Media._ID));

//視訊縮略圖路徑

String albumPath = "";

Cursor thumbCursor = context.getApplicationContext().getContentResolver().query(

MediaStore.Video.Thumbnails.EXTERNAL_CONTENT_URI,

null, MediaStore.Video.Thumbnails.VIDEO_ID

+ "=" + id, null, null);

if (thumbCursor.moveToFirst()) {

albumPath = thumbCursor.getString(thumbCursor

.getColumnIndex(MediaStore.Video.Thumbnails.DATA));

Bitmap bitmap = BitmapFactory.decodeFile(albumPath);

}

}

} catch (Exception e) {

e.printStackTrace();

} finally {

if (cursor != null)

cursor.close();

}

4.使用開源庫Fresco

mImage.setImageURI(Uri.parse("file://" + filePath));

5.使用開源庫Glide

Glide

.with( context )

.load( Uri.fromFile( new File( filePath ) ) )

.into( mImage);

參考: