您的位置:首页 > 移动开发 > Android开发

Android 视频截图方法

2016-04-25 09:39 501 查看
转载出处:http://blog.csdn.net/matrix_laboratory/article/details/43267907

1. 前言

本文讨论的是获取视频在某个时间点的图像, 而非屏幕截图.

如果要获取屏幕截图的话直接(电源键+音量下)

2. 获取视频截图


2.1 MediaMetadataRetriever

MediaMetadataRetriever从名称上看可以获取视频的Metadata信息, 此外还可以获取视频的截图, 其中抽取视频的缩略图就是采用此函数实现的.



2.2 使用方法

采用MediaMetadatRetriever.getFrameAtTime方法获取视频的该帧图像.


public Bitmap getFrameAtTime (long
timeUs)


public Bitmap getFrameAtTime (long
timeUs, int option)

需要注意的是:

该时间点的单位是微秒,普通时间的单位都是毫秒;

option :

OPTION_CLOSEST:
获取离timeUs最近的一帧图像.



此函数获取的帧是Sync Frame, 由于在timeUs此时间点不一定恰好有一个Sync Frame, 所以会有一定的误差.

获取Sync Frame时 有3中情况:

(1) 在timeUs处恰好有一个Sync Frame

(2) 获取timeUs前一个Sync
Frame

(3) 获取timeUs后一个Sync
Fram

OPTION_PREVIOUS_SYNC:
(1) or (2)

OPTION_NEXT_SYNC
: (1) or (3)

OPTION_CLOSEST_SYNC: 获取离timeUs最近的一个Sync Frame


[java] view plain copy 



MediaMetadataRetriever retriever = new MediaMetadataRetriever();
try {
retriever.setDataSource(mFilePath);
Bitmap bitmap = retriever.getFrameAtTime(miCurPos*1000);
String path = Environment.getExternalStorageDirectory() + File.separator
+ Environment.DIRECTORY_DCIM + "/Camera";
path += Tools.getDisplayName(mFilePath) + "_" + Tools.IntToTimeString(miCurPos) + "_" + ".png";
Tools.saveBitmap(bitmap, path);

sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(new File(path))));
} catch (IllegalArgumentException e) {
e.printStackTrace();
VideoLogger.e(TAG, "MediaMetadataRetriever.setDataSource Failed: " + mFilePath);
ShowToast(mResources.getString(R.string.info_screen_shot_failed), 0);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: