`
夏文权
  • 浏览: 243004 次
  • 性别: Icon_minigender_1
  • 来自: 贵州
社区版块
存档分类
最新评论

android 图片缩放

 
阅读更多
写道
最近在弄图片,遇到了一些内存溢出的问题,在网上看到的文章还不错,摘下来。

需要显示图片的缩略图或者在拍照上传的时候,而一般情况下,我们要将图片按照固定大小取缩略图,一般取缩略图的方法是使用BitmapFactory的decodeFile方法,
然后通过传递进去 BitmapFactory.Option类型的参数进行取缩略图,在Option中,属性值inSampleSize表示缩略图大小为原始图片大小的几分之一,即如果这个值为2,则取出的缩略图的宽和高都是原始图片的1/2,图片大小就为原始大小的1/4。

然而,如果我们想取固定大小的缩略图就比较困难了,比如,我们想将不同大小的图片去出来的缩略图高度都为200dip,而且要保证图片不失真,那怎么办?我们总不能将原始图片加载到内存中再进行缩放处理吧,要知道在移动开发中,内存是相当宝贵的,而且一张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那么将不返回实际的bitmap不给其分配内存空间而里面只包括一些解码边界信息即图片大小信息,那么相应的方法也就出来了,
通过设置inJustDecodeBounds为true,获取到outHeight(图片原始高度)和 outWidth(图片的原始宽度),然后计算一个inSampleSize(缩放值),然后就可以取图片了,这里要注意的是,inSampleSize 可能小于0,必须做判断。

 

 

实例代码:

/**
	 * 压缩图片
	 * @param path 文件路径
	 * @param w 屏幕的宽
	 * @param h 屏幕的高
	 * @return
	 */
	public static  Bitmap decodeBitmap(String path,int w, int h ) {
       
		BitmapFactory.Options op = new BitmapFactory.Options();
		//值设为true,将不返回实际的bitmap不给其分配内存空间而里面只包括一些解码边界信息即图片大小信息
        op.inJustDecodeBounds = true;
        Bitmap bmp = BitmapFactory.decodeFile(path, op); // 获取尺寸信息
        System.out.println("op.outWidth ====== " + op.outWidth);
        System.out.println("op.outHeight ====== " + op.outHeight);
        
        System.out.println("w ====== " + w);
        System.out.println("h ====== " + h);
        // 获取比例大小
        int wRatio = (int) Math.ceil(op.outWidth / w);
        int hRatio = (int) Math.ceil(op.outHeight / h);
        
        System.out.println("w ====== " + wRatio);
        System.out.println("h ====== " + hRatio);
        
        // 如果超出指定大小,则缩小相应的比例
        if (wRatio > 1 && hRatio > 1) {
            if (wRatio > hRatio) {
                op.inSampleSize = wRatio;
            } else {
                op.inSampleSize = hRatio;
            }
        }
        op.inJustDecodeBounds = false;
        bmp = BitmapFactory.decodeFile(path, op);
        return bmp;
    }
 
分享到:
评论

相关推荐

    Android-一个Android图片缩放查看控件支持手势

    这个名为"Android-一个Android图片缩放查看控件支持手势"的项目,旨在提供一个自定义的视图控件,它允许用户通过手势进行图片的放大、缩小以及平移操作,提升用户体验。下面我们将深入探讨这个控件的关键知识点和...

    Android图片缩放方法

    ### Android图片缩放方法详解 在Android开发过程中,图片处理是一项常见的需求,特别是在图片浏览器、社交媒体应用或任何涉及大量图像展示的场景下。对于优化用户体验和系统资源利用,有效地缩放图片至关重要。本文...

    android图片缩放放大

    这个"android图片缩放、放大demo"可能是提供了一个实际的项目实例,用于展示如何在Android应用程序中实现图片的动态调整大小。让我们深入探讨一下Android图片缩放放大的关键知识点。 1. **ImageView组件**: ...

    Android图片缩放动画Demo

    这个"Android图片缩放动画Demo"正是为了实现这样的功能而设计的。下面将详细解释其中涉及的关键知识点: 1. **ImageView的使用**: - `ImageView`是Android中展示图片的基础组件,可以加载本地或网络资源的图片。 ...

    PhotoView android 图片缩放浏览器

    在Android应用开发中,"PhotoView android 图片缩放浏览器"是一个专为查看和浏览图片设计的组件,它提供了丰富的交互功能,如手势缩放、平移等,提升了用户体验。这个项目主要依赖了三个核心组件和技术:Android-...

    android图片缩放双击旋转效果

    在Android开发中,实现图片的缩放、双击旋转以及拖动展示是一项常见的需求,尤其在设计用户界面或开发图像处理应用时。本教程将详细讲解如何在Android中实现这样的功能,主要涉及以下几个核心知识点: 1. **...

    Android图片缩放全功能

    "Android图片缩放全功能"这个主题涵盖了Android平台下对图片进行高效、灵活缩放的各种技术与策略。以下是对这个话题的详细阐述: 一、图片加载与显示 在Android中,我们通常使用`ImageView`来显示图片,但默认情况...

    android图片缩放源码

    android图片缩放源码,绝对好用,可以当类库使用

    android图片缩放

    ### Android图片缩放详解 #### 一、引言 在Android应用开发中,尤其是在涉及到大量图像展示的应用场景下,如图片浏览器、社交软件等,图片的处理与优化尤为重要。其中,图片缩放是一项非常基础且重要的功能。合理...

    android 图片缩放和多点触摸源码.rar

    本项目"android 图片缩放和多点触摸源码"正是针对这两个功能进行实现的示例,通过解析这个压缩包中的内容,我们可以学习到如何在Android应用中实现这些高级特性。 首先,让我们来看一下`PhotoView`。`PhotoView`是...

    android图片缩放,边界回弹,旋转,拖动,双击,单击,自动旋转摆正,图片居中显示

    总的来说,"android图片缩放,边界回弹,旋转,拖动,双击,单击,自动旋转摆正,图片居中显示"这一主题涵盖了Android开发中的许多核心技术,包括手势识别、图片处理、动画制作等,这些都是Android UI开发人员必须...

    Android实现图片缩放功能

    在Android开发中,图片缩放是一项常见的需求,特别是在ImageView组件中展示大图时,用户可能需要通过手势来放大或缩小图片以查看细节。本篇将详细介绍如何在Android中实现图片的缩放功能,特别是利用ImageView结合...

    Android中进行图片缩放显示

    Android中进行图片缩放显示,获取网络图片,双击放大缩小,支持多点触屏缩放和拖拽。 demo查看地址:http://blog.csdn.net/u011084603/article/details/50371843

    android 图片缩放 多点缩放

    在Android开发中,图片缩放和多点触控缩放是一项常见的需求,特别是在设计用户界面时,例如在ImageView中展示图像。本节将详细讲解如何实现Android中的图片自由缩放,以及支持多点触控的缩放功能。 一、图片缩放...

    android 图片缩放移动

    本文将详细讲解如何实现Android中的图片缩放和移动功能,并结合提供的文件"网络获取图片-进行缩放.txt"和"DragImageView"进行深入探讨。 首先,我们需要了解Android中的图像处理基础。在Android中,我们通常使用`...

    android 图片缩放和旋转

    以上就是Android中图片缩放和旋转的基本实现方式。实际应用中,我们还需要考虑性能优化,比如使用inBitmap和inPlaceScaling来减少内存占用,以及合理处理旋转后的图片尺寸,避免过大导致OOM(OutOfMemoryError)。 ...

    Android实现图片手势缩放、移动、双击放大缩小

    Android实现图片手势缩放、移动、双击放大缩小。

    Android GridView 图片缩放

    在"Android GridView 图片缩放"这个主题中,我们将深入探讨如何在GridView中实现图片点击后放大显示的功能,这在创建类似相册的应用或者需要用户查看详细图像的场景下非常实用。 首先,我们需要理解GridView的基本...

Global site tag (gtag.js) - Google Analytics