android 获取视频和图片的缩略图的方法

android获取缩略图有2种方法,第一种是通过android提供的方法来获取缩略图,这种方式获取缩略图的比较慢,第二种是通过图库来获取图片和视频的缩略图,这种方法比较快。
## 方法一 ##
直接通过ThumbnailUtils来获取图片和视频的缩略图:
 /** 
     * 获取视频的缩略图 
     * 先通过ThumbnailUtils来创建一个视频的缩略图,然后再利用ThumbnailUtils来生成指定大小的缩略图。 
     * 如果想要的缩略图的宽和高都小于MICRO_KIND,则类型要使用MICRO_KIND作为kind的值,这样会节省内存。 
     * @param videoPath 视频的路径 
     * @param width 指定输出视频缩略图的宽度 
     * @param height 指定输出视频缩略图的高度度 
     * @param kind 参照MediaStore.Images.Thumbnails类中的常量MINI_KIND和MICRO_KIND。 
     *            其中,MINI_KIND: 512 x 384,MICRO_KIND: 96 x 96 
     * @return 指定大小的视频缩略图 
     */  
    private Bitmap getVideoThumbnail(String videoPath, int width, int height,  
            int kind) {  
        Bitmap bitmap = null;  
        // 获取视频的缩略图  
        bitmap = ThumbnailUtils.createVideoThumbnail(videoPath, kind);  
        System.out.println("w"+bitmap.getWidth());  
        System.out.println("h"+bitmap.getHeight());  
        bitmap = ThumbnailUtils.extractThumbnail(bitmap, width, height,  
                ThumbnailUtils.OPTIONS_RECYCLE_INPUT);  
        return bitmap;  
    }  
## 方法二 ##
通过MediaStore来获取视频的缩略图,通过这种方式来获取缩略图的速度明显比第一种方法要快,第二种方式获取来的缩略图是在手机中开机就已经拿到手机中的缩略图了,直接通过数据库的方法来查询,明显比第一种要快:
/**
     * 通过文件名 获取视频的缩略图
     * 
     * @param context
     * @param cr     cr = getContentResolver();
     * @param testVideopath  全路径 "/mnt/sdcard/sidamingbu.mp4";
     * @return
     */
    public static Bitmap getVideoThumbnail(Context context, ContentResolver cr, String testVideopath) {
        // final String testVideopath = "/mnt/sdcard/sidamingbu.mp4";
        ContentResolver testcr = context.getContentResolver();
        String[] projection = { MediaStore.Video.Media.DATA, MediaStore.Video.Media._ID, };
        String whereClause = MediaStore.Video.Media.DATA + " = '" + testVideopath + "'";
        Cursor cursor = testcr.query(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, projection, whereClause,
                null, null);
        int _id = 0;
        String videoPath = "";
        if (cursor == null || cursor.getCount() == 0) {
            return null;
        }
        if (cursor.moveToFirst()) {

            int _idColumn = cursor.getColumnIndex(MediaStore.Video.Media._ID);
            int _dataColumn = cursor.getColumnIndex(MediaStore.Video.Media.DATA);

            do {
                _id = cursor.getInt(_idColumn);
                videoPath = cursor.getString(_dataColumn);
                System.out.println(_id + " " + videoPath);
            } while (cursor.moveToNext());
        }
        BitmapFactory.Options options = new BitmapFactory.Options();
        options.inDither = false;
        options.inPreferredConfig = Bitmap.Config.ARGB_8888;
        Bitmap bitmap = MediaStore.Video.Thumbnails.getThumbnail(cr, _id, Images.Thumbnails.MICRO_KIND,
                options);
        return bitmap;
    }

图片和视频的索引及其与对应缩略图的对应关系在 /sdcard/data/data/com.android.providers.media/databases中的db文件中,
图片对应表images和thumbnails
images
  _id    图片id
  _data  图片路径
thumbnails
  _id   缩略图id
  _data   缩略图存储位置
  image_id  对应原图id 

视频对应表images和thumbnails

video
  _id    视频id
  _data   视频路径
videothumbnails
  _id   视频缩略图id
  _data   视频缩略图存储位置
  image_id  对应视频id (这个应该是VIDEO_ID) 
  
下面再来总结一下获取视频缩略图的方法:
1. 获取视频的uri
 2. 转换为String,得到视频id
  3. 去videothumbnails表中找到视频缩略图路径
  4. 根据路径得到图片

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值