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

2016-02-19 09:05 62 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

来源:https://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...
  创建一个新的Form2,保存为Capture2.pas。设置属性BorderIcons的四个属性为false. BorderStyle设为bsNone,FormStyle设为fsStayOnTop. 两个公共变量:fRect:TRect,fBmp:TBitmap; unit Capture2; interface uses   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,...
注意,本例在 Delphi7.0下调试通过 /////////////////////////////////////////////////////////// (一)建立项目   new Items--Projects--MDI Application   (二)重新设计MDI子窗体--ChildWin,实现抓取的图象在ChildWin中显示。     在ChildWin子窗体中去掉原有的Memo1...
  (四)创建抓取图象的单元文件ScrnCpt unit ScrnCpt; interface uses windows,forms,controls,classes,Graphics; function CaptureScreenRect(ARect:TRect):TBitmap; function CaptureScreen:TBitmap; function CaptureClientImage(Control:TControl):TBitmap; function CaptureControlImage(C...
  (五)TMainForm的事件和函数 和 TPrinter打印应用 ////////// 打印知识 [菜单项file打印] 事件: procedure TMainForm.filePrintItemClick(Sender: TObject); begin   {kh1}print;{kh2}   Screen.Cursor := crHourglass;   try     if MDIChildCount0 then ...

经验教程

62

收藏

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