在开发图片浏览器等软件是,很多时候要显示图片的缩略图,而一般情况下,我们要将图片按照固定大小取缩略图,一般取缩略图的方法是使用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应用中正确处理图片缩略图的获取和展示,同时解决可能出现的问题。 总之,获取Android设备上的最近相片缩略图需要正确查询MediaStore,按时间排序,并...
在Android开发中,获取图片和视频的缩略图是一项常见的需求,这通常涉及到用户界面的展示,例如在相册应用中预览媒体内容。本文将详细介绍如何在Android中有效地获取这两种类型的媒体文件的缩略图。 一、图片缩略图...
在Android开发中,获取视频缩略图是一项常见的需求,例如在视频列表中预览视频内容。Android系统提供了多种方法来实现这一功能,本篇将详细讲解如何异步方式获取视频缩略图,并分享一个亲测可行的方法。 首先,...
在Android平台上,获取视频文件的缩略图是开发者经常遇到的需求。这主要涉及到多媒体处理,尤其是视频帧的提取。在本教程中,我们将探讨如何在Android应用中实现这一功能,同时利用JieCao(杰操)播放器库来辅助完成...
"10.0任务列表获取缩略图"是一个关于如何在Android 10.0版本中实现类似Android 7.0 UI的任务列表缩略图加载的技术点。这个功能涉及到系统的用户界面库、特定的Java类以及相关的资源文件。 首先,`SystemUISharedLib...
在Android开发中,获取视频和图片的缩略图是一项常用的功能,这有助于在应用中快速预览媒体内容,提升用户体验。下面将详细讲解如何在Android系统中实现这一目标。 首先,我们来了解一下“缩略图”(thumbnails)的...
1:获取sdcard 图片并以listview显示,并显示其缩略图 2:获取sdcard 视频并以listview显示,并显示其缩略图 3:在显示其缩略图时通过asynctask 来显示,防止阻塞主ui 4: 获取的缩略图保存在缓存中,下次显示时直接...
在Android开发中,获取视频的缩略图是常见的需求,比如在视频列表中展示预览图,或者在应用内创建视频相册等。本篇将详细介绍如何使用Android的`ThumbnailUtils`类来实现这一功能,并结合播放视频的操作,提供一份...
标题“从网络获取图片按图片原大小显示”和描述所指出的问题,通常涉及到图片加载库的使用、图像解码、布局适应以及性能优化等关键点。下面将详细阐述这些知识点: 1. **网络图片加载**:Android中,我们可以使用...
调用`IThumbnailProvider::GetThumbnail`方法可以获取指定大小的缩略图,并可以选择是否启用透明度。 为了防止在显示缩略图时出现闪烁,我们需要使用双缓冲技术。双缓冲是一种图形渲染优化策略,它先在内存中完成...
在Android开发中,图片上传和缩略图查看是常见的功能,尤其在社交应用如微信中,用户经常需要分享图片到动态。本Demo旨在提供一种实现此类功能的解决方案,确保其在实际项目中能够正常工作。 首先,我们关注的是...
在Android开发中,获取图片和视频的缩略图是一项常见的任务,这有助于优化用户体验,特别是在媒体库、相册应用或者需要展示多媒体内容的场景。本文将详细介绍如何在Android平台上通过编程方式获取这两种类型的缩略图...
在Android开发中,获取视频和图片的缩略图是一项常见的需求。以下是如何在Android中实现这一功能的详细步骤。 1. **获取视频缩略图** Android提供了两种方式来获取视频的缩略图: **(1)通过内容提供器获取**...
在IT行业中,获取视频缩略图是一项常见的任务,特别是在视频分享、播放器开发或网站设计等领域。本教程将深入探讨如何仅通过视频地址来获取视频的缩略图,这是一个高效且实用的技术。以下是对这个主题的详细阐述: ...
"java 图片生成缩略图" Java 图片生成缩略图是Java程序开发中一个常见的需求,通过将图片以缩略图形式展示,可以提高用户体验和网站性能。在本文中,我们将介绍使用Java生成缩略图的方法。 缩略图生成方法 在 ...
在Android开发中,有时我们需要实现一个功能,即根据指定的本地路径展示视频列表,并能点击缩略图播放视频。这个功能对于许多应用,如视频管理器或者个人相册应用,都是至关重要的。以下是对这个标题和描述所涉及...
在Java编程环境中,获取视频缩略图是一项常见的需求,尤其在多媒体应用或者视频分享平台中。这个过程涉及到多媒体处理和图像操作的知识。本文将详细解释如何在Java中实现这一功能,以及相关的技术点。 首先,Java...
在Android开发中,有时我们需要实现一个功能:当用户点击一个小的缩略图时,能够弹出一个全屏的大图查看器来展示详细内容。这个"Android 点击缩略图显示大图 Demo"就是用来演示如何实现这一功能的。下面我们将深入...
安卓app开发项目-实现获取视频的缩略图(ThumbnailUtils),并且播放(源码).zip安卓app开发项目-实现获取视频的缩略图(ThumbnailUtils),并且播放(源码).zip安卓app开发项目-实现获取视频的缩略图(ThumbnailUtils...
总的来说,Android项目实现获取视频的缩略图和播放功能,涉及到了多媒体处理、文件操作和UI设计等多个方面。理解并掌握这些知识点对于Android开发者来说是非常重要的,可以帮助我们构建更丰富的多媒体应用。