Android编程获取图片和视频缩略图的方法
本文实例讲述了Android编程获取图片和视频缩略图的方法。分享给大家供大家参考,具体如下:
从Android2.2开始系统新增了一个缩略图ThumbnailUtils类,位于framework的android.media.ThumbnailUtils位置,可以帮助我们从mediaprovider中获取系统中的视频或图片文件的缩略图,该类提供了三种静态方法可以直接调用获取。
1.createVideoThumbnail
staticBitmapcreateVideoThumbnail(StringfilePath,intkind) //获取视频文件的缩略图 //第一个参数为视频文件的位置,比如/sdcard/android123.3gp, //第二个参数可以为MINI_KIND或MICRO_KIND最终和分辨率有关
2.extractThumbnail
staticBitmapextractThumbnail(Bitmapsource,intwidth,intheight,intoptions) //直接对Bitmap进行缩略操作 //最后一个参数定义为OPTIONS_RECYCLE_INPUT,来回收资源
3.extractThumbnail
staticBitmapextractThumbnail(Bitmapsource,intwidth,intheight) //这个和上面的方法一样,无options选项
获取手机里视频缩略图:
publicstaticBitmapgetVideoThumbnail(ContentResolvercr,Uriuri){
Bitmapbitmap=null;
BitmapFactory.Optionsoptions=newBitmapFactory.Options();
options.inDither=false;
options.inPreferredConfig=Bitmap.Config.ARGB_8888;
Cursorcursor=cr.query(uri,newString[]{MediaStore.Video.Media._ID},null,null,null);
if(cursor==null||cursor.getCount()==0){
returnnull;
}
cursor.moveToFirst();
StringvideoId=cursor.getString(cursor.getColumnIndex(MediaStore.Video.Media._ID));//imageidinimagetable.s
if(videoId==null){
returnnull;
}
cursor.close();
longvideoIdLong=Long.parseLong(videoId);
bitmap=MediaStore.Video.Thumbnails.getThumbnail(cr,videoIdLong,Images.Thumbnails.MICRO_KIND,options);
returnbitmap;
}
获得指定目录sdcard里的视频缩略图:
importjava.io.File;
importandroid.app.Activity;
importandroid.graphics.Bitmap;
importandroid.graphics.BitmapFactory;
importandroid.media.ThumbnailUtils;
importandroid.os.Bundle;
importandroid.os.Environment;
importandroid.provider.MediaStore;
importandroid.widget.ImageView;
/**
*获取图片和视频的缩略图
*这两个方法必须在2.2及以上版本使用,因为其中使用了ThumbnailUtils这个类
*/
publicclassAndroidTestActivityextendsActivity{
privateImageViewimageThumbnail;
privateImageViewvideoThumbnail;
/**Calledwhentheactivityisfirstcreated.*/
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
imageThumbnail=(ImageView)findViewById(R.id.image_thumbnail);
videoThumbnail=(ImageView)findViewById(R.id.video_thumbnail);
StringimagePath=Environment.getExternalStorageDirectory()
.getAbsolutePath()
+File.separator
+"photo"
+File.separator
+"yexuan.jpg";
StringvideoPath=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,使
*用这个工具生成的图像不会被拉伸。
*@paramimagePath图像的路径
*@paramwidth指定输出图像的宽度
*@paramheight指定输出图像的高度
*@return生成的缩略图
*/
privateBitmapgetImageThumbnail(StringimagePath,intwidth,intheight){
Bitmapbitmap=null;
BitmapFactory.Optionsoptions=newBitmapFactory.Options();
options.inJustDecodeBounds=true;
//获取这个图片的宽和高,注意此处的bitmap为null
bitmap=BitmapFactory.decodeFile(imagePath,options);
options.inJustDecodeBounds=false;//设为false
//计算缩放比
inth=options.outHeight;
intw=options.outWidth;
intbeWidth=w/width;
intbeHeight=h/height;
intbe=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);
returnbitmap;
}
/**
*获取视频的缩略图
*先通过ThumbnailUtils来创建一个视频的缩略图,然后再利用ThumbnailUtils来生成指定大小的缩略图。
*如果想要的缩略图的宽和高都小于MICRO_KIND,则类型要使用MICRO_KIND作为kind的值,这样会节省内存。
*@paramvideoPath视频的路径
*@paramwidth指定输出视频缩略图的宽度
*@paramheight指定输出视频缩略图的高度度
*@paramkind参照MediaStore.Images.Thumbnails类中的常量MINI_KIND和MICRO_KIND。
*其中,MINI_KIND:512x384,MICRO_KIND:96x96
*@return指定大小的视频缩略图
*/
privateBitmapgetVideoThumbnail(StringvideoPath,intwidth,intheight,
intkind){
Bitmapbitmap=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);
returnbitmap;
}
}
布局:
<?xmlversion="1.0"encoding="utf-8"?> <LinearLayoutxmlns: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>
更多关于Android相关内容感兴趣的读者可查看本站专题:《Android图形与图像处理技巧总结》、《Android开发入门与进阶教程》、《Android资源操作技巧汇总》、《Android视图View技巧总结》及《Android控件用法总结》
希望本文所述对大家Android程序设计有所帮助。