在开发图片浏览器等软件是,很多时候要显示图片的缩略图,而一般情况下,我们要将图片按照固定大小取缩略图,一般取缩略图的方法是使用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.
(大概意思, 如果设置成TRUE, decoder将返回NULL值, 不过可以得到outHeight,outWidth等属性, 在不加载bitmap到内在的情况下我们可以查询这些属性)
那么相应的方法也就出来了,通过设置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://hi.baidu.com/thepurpledream/blog/item/aa47152299152ca94623e8db.html
分享到:
相关推荐
在Android开发中,获取视频和图片的缩略图是一项常用的功能,这有助于在应用中快速预览媒体内容,提升用户体验。下面将详细讲解如何在Android系统中实现这一目标。 首先,我们来了解一下“缩略图”(thumbnails)的...
标题“从网络获取图片按图片原大小显示”和描述所指出的问题,通常涉及到图片加载库的使用、图像解码、布局适应以及性能优化等关键点。下面将详细阐述这些知识点: 1. **网络图片加载**:Android中,我们可以使用...
Android提供了一些API,如`Bitmap.createScaledBitmap()`,可以用来创建一个指定大小的缩放后的Bitmap。另外,图片加载库也内置了图片缩放的优化算法。 8. **动画效果**: 为了提升用户体验,可以添加过渡动画,如...
缩略图的使用可以大大提高用户体验,因为它允许用户快速预览大量图片,而无需加载完整大小的图像,从而节省了流量和提高了加载速度。下面将详细介绍Android系统中实现浏览缩略图的相关知识点。 一、BitmapFactory类...
最后,我们需要"从相应的目录获取缩略图"。生成的预览图片可以保存在应用的内部存储或者外部存储,然后通过`Intent.ACTION_GET_CONTENT`或者自定义文件选择器供用户选择。通常,这些图片会被存储在`Android/data/...
`MediaStore.Images.Thumbnails`接口提供了获取缩略图的方法,如`getThumbnail()`,它可以按指定的图片URI和缩略图大小返回一个Bitmap对象。 以下是一个简单的`AsyncTask`示例,用于异步加载SD卡上的图片缩略图: ...
主要使用到的方法是`createVideoThumbnail()`,它可以从视频文件中生成一个指定大小的缩略图。其基本语法如下: ```java public static Bitmap createVideoThumbnail(String filePath, int kind) ``` - `filePath`...
在Android平台上,获取相机拍照和录制视频后的照片及视频的缩略图,主要涉及以下几个知识点: 1. **拍照与保存图片**: - 使用`Camera`或`CameraX`库来启动相机应用并捕获图像。相机应用会返回一个`Uri`,指向新...
上述代码展示了如何获取媒体库中指定图片的MINI缩略图。 总之,Android缩略图在应用开发中扮演着至关重要的角色,合理使用缩略图可以极大地提升应用的性能和用户体验。理解并掌握上述知识点,将有助于你在Android...
这个方法接受两个参数:视频文件的路径(`String filePath`)和`MediaStore.Images.Thumbnails`枚举类型,如`MiniThumbImage`或`FullScreenImage`,来指定缩略图的大小。返回的是一个`Bitmap`对象,即视频的缩略图...
对于图片的缩略图生成,Android还提供了一个叫做`BitmapFactory`的类,它包含了一些处理位图的方法,比如`decodeStream()`、`decodeFile()`等,可以用来从文件流或者文件路径中加载图片,并且可以通过`Options`参数...
3. **异步加载缩略图**:获取文件的缩略图通常涉及到IO操作,这些操作应放在主线程之外执行,以免阻塞用户界面。可以使用`AsyncTask`或者`IntentService`来实现。在`doInBackground()`方法中,使用`BitmapFactory`的...
- 缩略图的生成可以利用`Bitmap.createScaledBitmap()`方法,根据需要的大小动态生成合适的缩略图,减少内存消耗。 4. **图片裁剪**: - 用户可能需要裁剪图片以适应特定尺寸或比例,可以使用`...
在Android开发中,获取视频文件的截图和缩略图是一项常见的需求,比如在视频分享、预览或列表展示时。本文将详细介绍如何在Android中实现这一功能,包括使用`MediaMetadataRetriever`和`ThumbnailUtils`两个核心类。...
本文将深入探讨如何在Android开发中实现图片的高效缩放,特别是针对固定大小缩略图的生成。 #### 一、理解`BitmapFactory.Options` `BitmapFactory.Options`类在Android中用于控制`Bitmap`对象的解码过程。通过...
// 获取图片存储路径 String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) + "/MyApp/"; File dir = new File(path); if (!dir.exists()) { dir.mkdirs(); } // ...
本文将深入探讨如何在Android应用中有效地处理图片,包括如何获取缩略图、按固定大小压缩图片以及保存压缩后的图片等内容。 #### 一、理解BitmapFactory及其选项 在Android中,`BitmapFactory`是用于解码和创建`...
在Android应用开发中,用户经常需要与相机和图库交互来获取图片,这通常是用于上传头像、分享照片或者编辑图像等场景。本教程将详细讲解如何在Android应用中实现这两种图片获取方式。 首先,我们要了解Android中的...
同时,为了提高效率,可以考虑使用异步处理、队列服务或者缩略图生成来减轻服务器压力。 7. **错误处理与响应**:服务器端应返回合适的HTTP状态码和JSON响应,告知客户端上传是否成功。例如,200表示成功,400或500...
此外,还可以使用`Bitmap.createScaledBitmap()`来创建适合视图大小的缩略图。 8. **安全最佳实践**: 记住,不要直接使用`Uri`的路径,因为这可能会暴露私有文件。如果需要长期访问图片,最好复制到应用的私有...