記錄一下:
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);
作者:哎呦哥哥QAQ
連結:https://www.jianshu.com/p/4a519531321c
來源:簡書