欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android截取视频帧并转化为Bitmap示例

程序员文章站 2023-08-12 19:54:56
mainactivity如下: 复制代码 代码如下: package cn.testmediametadataretriever; import java.io.file;...
mainactivity如下:
复制代码 代码如下:

package cn.testmediametadataretriever;
import java.io.file;
import java.io.fileoutputstream;
import android.media.mediametadataretriever;
import android.os.bundle;
import android.os.environment;
import android.app.activity;
import android.graphics.bitmap;
import android.graphics.bitmap.compressformat;
import android.view.view;
import android.view.view.onclicklistener;
import android.widget.button;
/**
* demo描述:
* 利用mediametadataretriever按照时间截取视频
* 并转换为bitmap存放于sdcard
*
* 特别注意:
* getframeattime()方法第一个参数的单位是微秒 (us)
*
*/
public class mainactivity extends activity {
private button mbutton;
@override
protected void oncreate(bundle savedinstancestate) {
super.oncreate(savedinstancestate);
setcontentview(r.layout.main);
init();
}
private void init(){
mbutton=(button) findviewbyid(r.id.button);
mbutton.setonclicklistener(new clicklistenerimpl());
}
private class clicklistenerimpl implements onclicklistener{
@override
public void onclick(view v) {
switch (v.getid()) {
case r.id.button:

getbitmapsfromvideo();

default:
break;
}

}

}

public void getbitmapsfromvideo() {
string datapath = environment.getexternalstoragedirectory()+ "/testvideo.mp4";
mediametadataretriever retriever = new mediametadataretriever();
retriever.setdatasource(datapath);
// 取得视频的长度(单位为毫秒)
string time = retriever.extractmetadata(mediametadataretriever.metadata_key_duration);
// 取得视频的长度(单位为秒)
int seconds = integer.valueof(time) / 1000;
// 得到每一秒时刻的bitmap比如第一秒,第二秒
for (int i = 1; i <= seconds; i++) {
bitmap bitmap = retriever.getframeattime(i*1000*1000,mediametadataretriever.option_closest_sync);
string path = environment.getexternalstoragedirectory()+ file.separator + i + ".jpg";
fileoutputstream fos = null;
try {
fos = new fileoutputstream(path);
bitmap.compress(compressformat.jpeg, 80, fos);
fos.close();
} catch (exception e) {
e.printstacktrace();
}
}
}
}

main.xml如下:
复制代码 代码如下:

<relativelayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="获取视频的帧图片"
android:layout_centerinparent="true"
/>
</relativelayout>