在开发图片浏览器等软件是,很多时候要显示图片的缩略图,而一般情况下,我们要将图片按照固定大小取缩略图,一般取缩略图的方法是使用BitmapFactory的decodeFile方法,然后通过传递进去 BitmapFactory.Option类型的参数进行取缩略图,在Option中,属性值inSampleSize表示缩略图大小为原始图片大小的几分之一,即如果这个值为2,则取出的缩略图的宽和高都是原始图片的1/2,图片大小就为原始大小的1/4。
然而,如果我们想取固定大小的缩略图就比较困难了,比如,我们想将不同大小的图片去出来的缩略图高度都为200px,而且要保证图片不失真,那怎么办?我们总不能将原始图片加载到内存中再进行缩放处理吧,要知道在移动开发中,内存是相当宝贵的,而且一张100K的图片,加载完所占用的内存何止 100K?
经过研究,发现,Options中有个属性inJustDecodeBounds,研究了一下,终于明白是什么意思了,SDK中的E文是这么说的
If set to true, the decoder will return null (no bitmap), but the out... fields will still be set, allowing the caller to query the bitmap without having to allocate the memory for its pixels.
哦,明白了,那么相应的方法也就出来了,通过设置inJustDecodeBounds为true,获取到outHeight(图片原始高度)和 outWidth(图片的原始宽度),然后计算一个inSampleSize(缩放值),然后就可以取图片了,这里要注意的是,inSampleSize 可能小于1,必须做判断,同时由于inSampleSize为Int类型,而图片的高度和宽度也为int类型,通过精度的转换,可能会存在失真的问题,那么,我这样进行那个判断(实例代码中为取高度为200PX的缩略图)
int be = options.outHeight / 20;//应该直接除200的,但这里出20是为了增加一位数的精度
if(be%10 !=0)
be+=10; //尽量取大点图片,否则会模糊
be=be/10;
if (be <= 0) //判断200是否超过原始图片高度
be = 1; //如果超过,则不进行缩放
options.inSampleSize = be;
整体代码如下
BitmapFactory.Options options = new BitmapFactory.Options();
//options.inSampleSize = 3;
options.outHeight = 200;
options.inJustDecodeBounds = true;
//options.
if (position < 0) {
position = position + mImageDirs.size();
}
// 获取这个图片的宽和高
Bitmap bm = BitmapFactory.decodeFile(this.mImageDirs
.get(position % mImageDirs.size()), options); //此时返回bm为空
options.inJustDecodeBounds = false;
int be = options.outHeight / 20;
if(be%10 !=0)
be+=10;
be=be/10;
if (be <= 0)
be = 1;
options.inSampleSize = be;
bm = BitmapFactory.decodeFile(this.mImageDirs.get(position
% mImageDirs.size()), options);
int w = bm.getWidth();
int h = bm.getHeight();
w = w *200 /h;
i.setImageBitmap(bm);
http://cnmsdn.com/html/201006/1276372230ID6068.html
2010-11-29-17-14
分享到:
相关推荐
解决了网上获取缩略图的代码获取不到或者顺序不对的问题
android 异步方式获取视频缩略图。亲测可用,不敢独享,0分发布
用于讲解博客内容,博客地址:http://blog.csdn.net/shiquanqq/article/details/51098098
安卓获取视频文件的缩略图,使用JieCao播放视频
1:获取sdcard 图片并以listview显示,并显示其缩略图 2:获取sdcard 视频并以listview显示,并显示其缩略图 3:在显示其缩略图时通过asynctask 来显示,防止阻塞主ui 4: 获取的缩略图保存在缓存中,下次显示时直接...
图片缩略图展示图片缩略图展示图片缩略图展示图片缩略图展示图片缩略图展示图片缩略图展示图片缩略图展示图片缩略图展示图片缩略图展示图片缩略图展示图片缩略图展示图片缩略图展示图片缩略图展示图片缩略图展示
10.0任务列表获取缩略图,获取最近任务,仿7.0UI,直接引入加载即可。
能够获取到视频的缩略图片 也能够获取图片的缩略图片 两个功能
android 获取视频,图片缩略图的具体实现,需要的朋友可以参考一下
Android裁剪图片(裁剪为缩略图和大图两种形式)
主要介绍了Android编程获取图片和视频缩略图的方法,结合实例形式分析了Android图形图像处理所涉及的常用函数与使用技巧,需要的朋友可以参考下
android 录制视频并生成缩略图。
Android加载PDF,附带缩略图,左右联动。
本资源是基于Springmvc的图片上传案例,并对上传的图片添加了生成缩略图的功能。
根据自己指定的本地文件路径,获取视频文件并已双列显示缩略图,点击缩略图调用系统播放器进行播放,该文件是源代码,适用用android平台
安卓app开发项目-实现获取视频的缩略图(ThumbnailUtils),并且播放(源码).zip安卓app开发项目-实现获取视频的缩略图(ThumbnailUtils),并且播放(源码).zip安卓app开发项目-实现获取视频的缩略图(ThumbnailUtils...
超简单 获取视频缩略图。
java 上传图片时生成对应的缩略图,缩略图的大小可手动更改,代码中有详细注释
Android项目实现获取视频的缩略图(ThumbnailUtils),并且播放.rar
只用视频地址就能获取缩略图了,非常方便,分享给大家