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

2016-02-19 09:05 70 1 收藏

生活已是百般艰难,为何不努力一点。下面图老师就给大家分享Android截取视频帧并转化为Bitmap示例,希望可以让热爱学习的朋友们体会到设计的小小的乐趣。

【 tulaoshi.com - 编程语言 】

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

来源:http://www.tulaoshi.com/n/20160219/1589452.html

延伸阅读
标签: ASP
  <!-- #include file="adovbs.inc" -- <% ' 删除已经存在的文件 Dim objFSO Set objFSO = Server.CreateObject("Scripting.FileSystemObject") If objFSO.FileExists(Server.MapPath("db_xml.xml")) Then     objFSO.DeleteFile Server.MapPath("db_xml.xml") End IF...
<script   /*   功能:YYYY-MM-DD 数字日期转化为汉字   例:1984-3-7 - 一九八四年三月七日   调用:baodate2chinese("1984-3-7")   */   var chinese = ['零','一','二','三','四','五','六','七','八','九'];   var len = ['十'];   var ydm =['年','月','日'];   function num2chinese(s) ...
标签: 电脑入门
我们在网上下载了很多视频,有时候并不需要一整段,而想要截取视频片段,将视频最精彩的小部分截取出来,怎么做到呢?这里就教大家使用《超级转换秀》来截取视频片段。 1、 导入要截取片段的视频 如下图,点击添加待转换视频按钮,将弹出文件选择框,在文件选择框中选择要截取片段的视频 2、 选择截取后的视频片段格式 进入设置待转...
  (五)TMainForm的事件和函数 和 TPrinter打印应用 ////////// 打印知识 [菜单项file打印] 事件: procedure TMainForm.filePrintItemClick(Sender: TObject); begin   {kh1}print;{kh2}   Screen.Cursor := crHourglass;   try     if MDIChildCount0 then ...
  创建一个新的Form2,保存为Capture2.pas。设置属性BorderIcons的四个属性为false. BorderStyle设为bsNone,FormStyle设为fsStayOnTop. 两个公共变量:fRect:TRect,fBmp:TBitmap; unit Capture2; interface uses   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,...

经验教程

914

收藏

23
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部