广

android开发

  • IOS开发
  • android开发
  • PHP编程
  • JavaScript
  • ASP.NET
  • ASP编程
  • JSP编程
  • Java编程
  • 易语言
  • Ruby编程
  • Perl编程
  • AJAX
  • 正则表达式
  • C语言
  • 编程开发

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

    2018-04-08 09:03:33 次阅读 稿源:互联网
    广告
    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>

    一起学吧部分文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与一起学吧进行文章共享合作。

    广告
    广告
    广告