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后也需要缩小处理。

  • 相关阅读:
    巨人的崛起 Android操作系统发展历程
    iPhone 4S定位功能加强 支持GLONASS系统
    android子线程更新UI,与主Thread一起工作
    什么在阻碍移动互联网的普及?
    WEB.CONFIG 配置详解
    解决在aspx页面上进行传中文参数时会出现乱码问题
    VS2005水晶报表注册码
    windows2003应用程序池假死的问题
    浅谈ASP.NET内部机制
    合理建立数据库索引
  • 原文地址:https://www.cnblogs.com/error404/p/2142971.html
Copyright © 2011-2022 走看看