zoukankan      html  css  js  c++  java
  • Android 获取SDCard上图片和视频的缩略图

    从Android 2.2开始系统新增了一个缩略图ThumbnailUtils类,位于framework的android.media.ThumbnailUtils位置,可以帮助我们从mediaprovider中获取系统中的视频或图片文件的缩略图,该类提供了三种静态方法可以直接调用获取。

    1.

    static Bitmap  createVideoThumbnail(String filePath, int kind)  //获取视频文件的缩略图,第一个参数为视频文件的位置,比如/sdcard/android123.3gp,而第二个参数可以为MINI_KIND或 MICRO_KIND最终和分辨率有关

    2.

    static Bitmap  extractThumbnail(Bitmap source, int width, int height, int options)  //直接对Bitmap进行缩略操作,最后一个参数定义为OPTIONS_RECYCLE_INPUT ,来回收资源

    3.

    static Bitmap  extractThumbnail(Bitmap source, int width, int height) // 这个和上面的方法一样,无options选项

    ====================================================================================

    获取手机里视频缩略图:

    public static Bitmap getVideoThumbnail(ContentResolver cr, Uri uri) {  
            Bitmap bitmap = null;  
            BitmapFactory.Options options = new BitmapFactory.Options();  
            options.inDither = false;  
            options.inPreferredConfig = Bitmap.Config.ARGB_8888;  
            Cursor cursor = cr.query(uri,new String[] { MediaStore.Video.Media._ID }, null, null, null);   
          
            if (cursor == null || cursor.getCount() == 0) {  
                return null;  
            }  
            cursor.moveToFirst();  
            String videoId = cursor.getString(cursor.getColumnIndex(MediaStore.Video.Media._ID));  //image id in image table.s  
      
            if (videoId == null) {  
            return null;  
            }  
            cursor.close();  
            long videoIdLong = Long.parseLong(videoId);  
            bitmap = MediaStore.Video.Thumbnails.getThumbnail(cr, videoIdLong,Images.Thumbnails.MICRO_KIND, options);  
      
            return bitmap;  
            }  
    

      


    ==========================================================================================

    获得指定目录sdcard里的视频缩略图:

    import java.io.File;
    import android.app.Activity;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.media.ThumbnailUtils;
    import android.os.Bundle;
    import android.os.Environment;
    import android.provider.MediaStore;
    import android.widget.ImageView;
    /**
     * 获取图片和视频的缩略图
     * 这两个方法必须在2.2及以上版本使用,因为其中使用了ThumbnailUtils这个类
     */
    public class AndroidTestActivity extends Activity {
     private ImageView imageThumbnail;
     private ImageView videoThumbnail;
    
     /** Called when the activity is first created. */
     @Override
     public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.main);
    
      imageThumbnail = (ImageView) findViewById(R.id.image_thumbnail);
      videoThumbnail = (ImageView) findViewById(R.id.video_thumbnail);
    
      String imagePath = Environment.getExternalStorageDirectory()
        .getAbsolutePath()
        + File.separator
        + "photo"
        + File.separator
        + "yexuan.jpg";
    
      String videoPath = Environment.getExternalStorageDirectory()
        .getAbsolutePath()
        + File.separator
        + "video"
        + File.separator
        + "醋点灯.avi";
      
      imageThumbnail.setImageBitmap(getImageThumbnail(imagePath, 60, 60));
      videoThumbnail.setImageBitmap(getVideoThumbnail(videoPath, 60, 60,
        MediaStore.Images.Thumbnails.MICRO_KIND));
     }
    
     /**
      * 根据指定的图像路径和大小来获取缩略图
      * 此方法有两点好处:
      *     1. 使用较小的内存空间,第一次获取的bitmap实际上为null,只是为了读取宽度和高度,
      *        第二次读取的bitmap是根据比例压缩过的图像,第三次读取的bitmap是所要的缩略图。
      *     2. 缩略图对于原图像来讲没有拉伸,这里使用了2.2版本的新工具ThumbnailUtils,使
      *        用这个工具生成的图像不会被拉伸。
      * @param imagePath 图像的路径
      * @param width 指定输出图像的宽度
      * @param height 指定输出图像的高度
      * @return 生成的缩略图
      */
     private Bitmap getImageThumbnail(String imagePath, int width, int height) {
      Bitmap bitmap = null;
      BitmapFactory.Options options = new BitmapFactory.Options();
      options.inJustDecodeBounds = true;
      // 获取这个图片的宽和高,注意此处的bitmap为null
      bitmap = BitmapFactory.decodeFile(imagePath, options);
      options.inJustDecodeBounds = false; // 设为 false
      // 计算缩放比
      int h = options.outHeight;
      int w = options.outWidth;
      int beWidth = w / width;
      int beHeight = h / height;
      int be = 1;
      if (beWidth < beHeight) {
       be = beWidth;
      } else {
       be = beHeight;
      }
      if (be <= 0) {
       be = 1;
      }
      options.inSampleSize = be;
      // 重新读入图片,读取缩放后的bitmap,注意这次要把options.inJustDecodeBounds 设为 false
      bitmap = BitmapFactory.decodeFile(imagePath, options);
      // 利用ThumbnailUtils来创建缩略图,这里要指定要缩放哪个Bitmap对象
      bitmap = ThumbnailUtils.extractThumbnail(bitmap, width, height,
        ThumbnailUtils.OPTIONS_RECYCLE_INPUT);
      return bitmap;
     }
    
     /**
      * 获取视频的缩略图
      * 先通过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;
     }
     
    }
    
     
    

      

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical" >
    
        <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="图片缩略图" />
    
        <ImageView
            android:id="@+id/image_thumbnail"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    
        <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="视频缩略图" />
    
        <ImageView
            android:id="@+id/video_thumbnail"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    
    </LinearLayout>

      

  • 相关阅读:
    2. Add Two Numbers
    1. Two Sum
    leetcode 213. 打家劫舍 II JAVA
    leetcode 48. 旋转图像 java
    leetcode 45. 跳跃游戏 II JAVA
    leetcode 42. 接雨水 JAVA
    40. 组合总和 II leetcode JAVA
    24. 两两交换链表中的节点 leetcode
    1002. 查找常用字符 leecode
    leetcode 23. 合并K个排序链表 JAVA
  • 原文地址:https://www.cnblogs.com/firecode/p/2818294.html
Copyright © 2011-2022 走看看