从Uri获取视频缩略图

Zoc*_*ros 4 video android thumbnails android-bitmap

我想从我的画廊中选择一个视频.它工作正常.但现在我想显示一个Bitmap,作为缩略图.我厌倦了这段代码,它不起作用,它总是说:NullPointerException

Bitmap bitmap2 = ThumbnailUtils.createVideoThumbnail(uri.getPath, MediaStore.Video.Thumbnails.MICRO_KIND);
Run Code Online (Sandbox Code Playgroud)

这都在onActivityResult中.

如何从视频Uri中获取位图?

谢谢你的帮助

shi*_*lms 10

onActivityResult

String[] filePathColumn = {MediaStore.Images.Media.DATA};
Cursor cursor = context.getContentResolver().query(uri, filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String picturePath = cursor.getString(columnIndex);
cursor.close();

Bitmap bitmap = ThumbnailUtils.createVideoThumbnail(picturePath, MediaStore.Video.Thumbnails.MICRO_KIND);
Run Code Online (Sandbox Code Playgroud)

编辑

Kotlin版

val filePathColumn = arrayOf(MediaStore.Images.Media.DATA)
val cursor = context.contentResolver.query(uri, filePathColumn, null, null, null)
cursor.moveToFirst()

val columnIndex = cursor.getColumnIndex(filePathColumn[0])
val picturePath = cursor.getString(columnIndex)
cursor.close()

val bitmap = ThumbnailUtils.createVideoThumbnail(picturePath, MediaStore.Video.Thumbnails.MICRO_KIND)
Run Code Online (Sandbox Code Playgroud)

  • 位图为空。 (2认同)

Kir*_*zin 7

在最新的API 24中,如果坚持接受的答案中的方法,则可能会遇到一些问题。

例如在这一行中int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);有时我会收到W/System.err: java.lang.IllegalArgumentException: column '_data' does not exist错误消息。

同样在最新的API中,如果您处理小部件或共享内容,则可能会收到SecurityException。记在脑子里。

至于来自Uri的视频缩略图-我使用了一种利用MediaMetadataRetriever的方法,因此您不需要获取String filePath:

            MediaMetadataRetriever mMMR = new MediaMetadataRetriever();
            mMMR.setDataSource(context, videoUri);
            bmp = mMMR.getFrameAtTime();
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助


小智 5

试试这个:

Bitmap bitmap2 = ThumbnailUtils.createVideoThumbnail( uri.getPath() , MediaStore.Images.Thumbnails.MINI_KIND );
Run Code Online (Sandbox Code Playgroud)