API 8开始,新增了一个类:

android.media.ThumbnailUtils这个类提供了3个静态方法一个用来获取视频第一帧得到的Bitmap,2个对图片进行缩略处理。

public static Bitmap createVideoThumbnail (String filePath, int kind)

第一个参数是视频文件的路径,第二个参数是指定图片的大小,有两种选择Thumbnails.MINI_KINDThumbnails.MICRO_KIND。

  • 第一种文档上说大小是512 x 384 ,我用一个MP4格式文件测试得到544 x 960,用一个wmv格式文件测试得到160 x 120。明显不靠谱。
  • 第二种参数两种格式文件得到的大小都是 96 x 96,这个才是缩略图。
extractThumbnail(Bitmap source, int width, int height, int options)extractThumbnail(Bitmap source, int width, int height)

这两种方法都是用来处理Bitmap的大小的,第一个参数是要处理的Bitmap,第二个参数是处理后宽度,第三个是高度,第四个参数options,如果options定义为OPTIONS_RECYCLE_INPUT,则回收资源。也就是说可以用第三种方法把截取到的视频第一帧的Bitmap转成任意想要的大小,第三个方法还可以获取内存卡内图片的缩略图。

Bitmap bitmap = ThumbnailUtils.createVideoThumbnail(path1, Thumbnails.MINI_KIND);  bitmap = ThumbnailUtils.extractThumbnail(bitmap, 210, 210);

API 10开始新增一类MediaMetadataRetriever可以用来获取媒体文件的信息

复制代码
MediaMetadataRetriever mmr = new MediaMetadataRetriever();  mmr.setDataSource("/sdcard/33.mp4");  Bitmap bitmap = mmr.getFrameAtTime();  image.setImageBitmap(bitmap);  System.out.println(mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DATE)+"");  System.out.println(mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_MIMETYPE)+"");  mmr.release();
复制代码

MediaMetadataRetriever可以获取视频任何一帧的缩略图。

复制代码
public static Bitmap createVideoThumbnail(String filePath) {      // MediaMetadataRetriever is available on API Level 8      // but is hidden until API Level 10      Class<?> clazz = null;      Object instance = null;      try {          clazz = Class.forName("android.media.MediaMetadataRetriever");          instance = clazz.newInstance();            Method method = clazz.getMethod("setDataSource", String.class);          method.invoke(instance, filePath);            // The method name changes between API Level 9 and 10.          if (Build.VERSION.SDK_INT <= 9) {              return (Bitmap) clazz.getMethod("captureFrame").invoke(instance);          } else {              byte[] data = (byte[]) clazz.getMethod("getEmbeddedPicture").invoke(instance);              if (data != null) {                  Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);                  if (bitmap != null) return bitmap;              }              return (Bitmap) clazz.getMethod("getFrameAtTime").invoke(instance);          }      } catch (IllegalArgumentException ex) {          // Assume this is a corrupt video file      } catch (RuntimeException ex) {          // Assume this is a corrupt video file.      } catch (InstantiationException e) {          Log.e(TAG, "createVideoThumbnail", e);      } catch (InvocationTargetException e) {          Log.e(TAG, "createVideoThumbnail", e);      } catch (ClassNotFoundException e) {          Log.e(TAG, "createVideoThumbnail", e);      } catch (NoSuchMethodException e) {          Log.e(TAG, "createVideoThumbnail", e);      } catch (IllegalAccessException e) {          Log.e(TAG, "createVideoThumbnail", e);      } finally {          try {              if (instance != null) {                  clazz.getMethod("release").invoke(instance);              }          } catch (Exception ignored) {          }      }      return null;  }
复制代码
     

其他精彩文章

android学习笔记(41)android选项菜单和子菜单(SubMenu )

android学习笔记(40)Notification的功能与用法

android学习笔记(42)android使用监听器来监听菜单事件

android学习笔记(43)android创建单选菜单和复选菜单

android学习笔记(44)android设置与菜单项关联的Activity

android学习笔记(45)android上下文菜单

更多关于android开发文章

更多相关文章

  1. android底部菜单栏的实现和百度地图API的使用
  2. Android怎么用onCreateOptionsMenu()创建菜单
  3. Android滑动导航菜单的快速构建
  4. Android界面设计(左侧隐藏菜单右边显示content)demo
  5. Android 使用Material Design实现滑动菜单
  6. 基于android平台底部菜单实现

随机推荐

  1. Window下Android(安卓)SDK安装
  2. Android(安卓)activity简单跳转动画(overr
  3. Android(安卓)之SearchView翻译
  4. Android(安卓)学习笔记(十四):Activity-Auto
  5. Android(安卓)5.0输入系统分析之InputRea
  6. android发送网络链接的几个类
  7. Android中的5种数据存储方式之——Shared
  8. 黑马66期android学习笔记 day1_快速入门
  9. Android(安卓)如何修改默认的searchable
  10. Android中监听EditText文本输入