zoukankan      html  css  js  c++  java
  • android为视频、音乐、图片等生成缩略图

    1、Video
    对于视频,取第一帧作为缩略图,也就是怎样从filePath得到一个Bitmap对象。

    private Bitmap createVideoThumbnail(String filePath) {
    Bitmap bitmap
    = null;
    MediaMetadataRetriever retriever
    = new MediaMetadataRetriever();
    try {
    retriever.setMode(MediaMetadataRetriever.MODE_CAPTURE_FRAME_ONLY);
    retriever.setDataSource(filePath);
    bitmap
    = retriever.captureFrame();
    }
    catch(IllegalArgumentException ex) {
    // Assume this is a corrupt video file
    } catch (RuntimeException ex) {
    // Assume this is a corrupt video file.
    } finally {
    try {
    retriever.release();
    }
    catch (RuntimeException ex) {
    // Ignore failures while cleaning up.
    }
    }
    return bitmap;
    }Android提供了MediaMetadataRetriever,由JNI(media_jni)实现。
    看得出MediaMetadataRetriever主要有两个功能:MODE_GET_METADATA_ONLY和MODE_CAPTURE_FRAME_ONLY
    这里设mode为MODE_CAPTURE_FRAME_ONLY,调用captureFrame取得一帧。
    另外还有两个方法可以用:
    extractMetadata 提取文件信息,ARTIST、DATE、YEAR、DURATION、RATING、FRAME_RATE、VIDEO_FORMAT
    和extractAlbumArt 提取专辑信息,这个下面的音乐文件可以用到。

    2、Music
    对于音乐,取得AlbumImage作为缩略图,还是用MediaMetadataRetriever

    private Bitmap createAlbumThumbnail(String filePath) {
    Bitmap bitmap
    = null;
    MediaMetadataRetriever retriever
    = new MediaMetadataRetriever();
    try {
    retriever.setMode(MediaMetadataRetriever.MODE_GET_METADATA_ONLY);
    retriever.setDataSource(filePath);
    byte[] art = retriever.extractAlbumArt();
    bitmap
    = BitmapFactory.decodeByteArray(art, 0, art.length);
    }
    catch(IllegalArgumentException ex) {
    }
    catch (RuntimeException ex) {
    }
    finally {
    try {
    retriever.release();
    }
    catch (RuntimeException ex) {
    // Ignore failures while cleaning up.
    }
    }
    return bitmap;
    }

    retriever.extractAlbumArt()得到的是byte数组,还需要一步用BitmapFactory编码得到Bitmap对象。

    3、Image
    图片就很简单了 Bitmap bm
    = null;

    Options op
    = new Options();

    op.inSampleSize
    = inSampleSize;

    op.inJustDecodeBounds
    = false;

    bm
    = BitmapFactory.decodeFile(mFile.getPath(), op);

    复制代码能直接得到Bitmap对象,把图片缩小到合适大小就OK。
    同样上面的Video和Music,retrive到Bitmap后也需要缩小处理。

  • 相关阅读:
    VS远程调试亲历
    IIS7.5 配置虚拟目录的经历
    IE 兼容一问题一小记
    寻找 IBatisNet 批量插入(批量复制) 的心路历程
    Linq 多连接及 left join 实例 记录
    easyui treegrid idField 所在属性中值有花括号(如Guid)当有鼠标事件时会报错,行记录一下
    HDU1754
    HDU1166
    线段树模板
    HDU1599(Floyd最小环)
  • 原文地址:https://www.cnblogs.com/error404/p/2142971.html
Copyright © 2011-2022 走看看