`
jk138
  • 浏览: 156217 次
  • 性别: Icon_minigender_1
  • 来自: 茂名
社区版块
存档分类
最新评论

Android对图片的压缩读取和保存

阅读更多
在开发图片浏览器等软件是,很多时候要显示图片的缩略图,而一般情况下,我们要将图片按照固定大小取缩略图,一般取缩略图的方法是使用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那么将不返回实际的bitmap不给其分配内存空间而里面只包括一些解码边界信息即图片大小信息,那么相应的方法也就出来了,通过设置inJustDecodeBounds为true,获取到outHeight(图片原始高度)和 outWidth(图片的原始宽度),然后计算一个inSampleSize(缩放值),然后就可以取图片了,这里要注意的是,inSampleSize 可能小于0,必须做判断。
具体代码如下:
FrameLayout fr=(FrameLayout)findViewById(R.id.FrameLayout01);
        BitmapFactory.Options options = new BitmapFactory.Options();
        options.inJustDecodeBounds = true;
        Bitmap bitmap = BitmapFactory.decodeFile("/sdcard/test.jpg", options); //此时返回bm为空
        options.inJustDecodeBounds = false;
         //缩放比
        int be = (int)(options.outHeight / (float)200);
        if (be <= 0)
            be = 1;
        options.inSampleSize = be;
        //重新读入图片,注意这次要把options.inJustDecodeBounds 设为 false哦
        bitmap=BitmapFactory.decodeFile("/sdcard/test.jpg",options);
        int w = bitmap.getWidth();
        int h = bitmap.getHeight();
        System.out.println(w+"   "+h);
        ImageView iv=new ImageView(this);
        iv.setImageBitmap(bitmap);

这样我们就可以读取较大的图片而不会内存溢出了。如果你想把压缩后的图片保存在Sdcard上的话就很简单了:
File file=new File("/sdcard/feng.png");
        try {
            FileOutputStream out=new FileOutputStream(file);
            if(bitmap.compress(Bitmap.CompressFormat.PNG, 100, out)){
                out.flush();
                out.close();
            }
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
ok,这样就把图片保存在/sdcard/feng.png这个文件里面了,呵呵。
但是这里的缩放保存是按长宽比例的,下边也可以按固定大小缩放哦:

        int bmpWidth  = bitmap.getWidth(); 
        int bmpHeight = bitmap.getHeight(); 
         
        //缩放图片的尺寸 
        float scaleWidth  = (float) sWidth / bmpWidth;     //按固定大小缩放  sWidth 写多大就多大
        float scaleHeight = (float) sHeight / bmpHeight;  //
        Matrix matrix = new Matrix(); 
        matrix.postScale(scaleWidth, scaleHeight); 
         
        //产生缩放后的Bitmap对象 
        Bitmap resizeBitmap = Bitmap.createBitmap( 
            bitmap, 0, 0, bmpWidth, bmpHeight, matrix, false); 
        bitmap.recycle(); 
                Bitmap resizeBitmap = bitmap; 
        //Bitmap to byte[] 
        byte[] photoData = bitmap2Bytes(resizeBitmap); 
       
        //save file 
        String fileName = "/sdcard/test.jpg"; 
        FileUtil.writeToFile(fileName, photoData); 
分享到:
评论

相关推荐

    基于gcc的stm32环境搭建源码+文档说明.zip

    基于gcc的stm32环境搭建源码+文档说明.zip,个人经导师指导并认可通过的高分设计项目,评审分99分,代码完整确保可以运行,小白也可以亲自搞定,主要针对计算机相关专业的正在做毕业设计的学生和需要项目实战练习的学习者,可作为毕业设计、课程设计、期末大作业,代码资料完整,下载可用。 基于gcc的stm32环境搭建源码+文档说明.zip基于gcc的stm32环境搭建源码+文档说明.zip基于gcc的stm32环境搭建源码+文档说明.zip基于gcc的stm32环境搭建源码+文档说明.zip基于gcc的stm32环境搭建源码+文档说明.zip基于gcc的stm32环境搭建源码+文档说明.zip基于gcc的stm32环境搭建源码+文档说明.zip基于gcc的stm32环境搭建源码+文档说明.zip基于gcc的stm32环境搭建源码+文档说明.zip基于gcc的stm32环境搭建源码+文档说明.zip基于gcc的stm32环境搭建源码+文档说明.zip基于gcc的stm32环境搭建源码+文档说明.zip基于gcc的stm32环境搭建源码+文档说明.zip基于gcc的stm32环境搭建源码+文档说明.zip基于gcc的stm32环境搭建源码+文档说明.zip基于gcc的stm32环境搭建源码+文档说明.zip基于gcc的stm32环境搭建源码+文档说明.zip基于gcc的stm32环境搭建源码+文档说明.zip基于gcc的stm32环境搭建源码+文档说明.zip基于gcc的stm32环境搭建源码+文档说明.zip基于gcc的stm32环境搭建源码+文档说明.zip基于gcc的stm32环境搭建源码+文档说明.zip基于gcc的stm32环境搭建源码+文档说明.zip基于gcc的stm32环境搭建源码+文档说明.zip基于gcc的stm32环境搭建源码+文档说明.zip基于gcc的

    锂电池分选机:欧姆龙NJ501-1500与威伦通触摸屏驱动的先进工业自动化技术

    内容概要:本文详细介绍了欧姆龙NJ501-1500锂电池分选机的技术特点和工艺流程。该设备采用国际IEC 61131标准编程模式,具备伺服运动控制、高创直线电机DDR高速同步运动控制等功能,能进行电压测试、厚度测量等操作。设备配备雅马哈和ABB机械手,实现多轴协同作业,同时具备故障记录、产量统计及OEE功能,确保高效、精准的电池分选。此外,威伦通触摸屏提供的优质程序模板提升了编程效率。 适合人群:从事工业自动化领域的工程师和技术人员,尤其是关注锂电池生产和分选设备的专业人士。 使用场景及目标:适用于需要提升锂电池分选效率和质量的企业,旨在帮助技术人员理解和应用先进的工业自动化技术,提高生产线的自动化水平和管理水平。 其他说明:文中附有详细的PLC程序、触摸屏程序、变量地址分配表、IO分配表、雅马哈机械手程序、ABB六轴机器人程序及电气原理图等资料,便于深入研究和实施。

    毕业论文-超级图文最新资源包及上传位置说明-整站商业源码.zip

    毕业论文-超级图文最新资源包及上传位置说明-整站商业源码.zip

    毕业论文-【超人】积分商城 5.2.26-整站商业源码.zip

    毕业论文-【超人】积分商城 5.2.26-整站商业源码.zip

    免费0积分--gc10-det yolo格式

    免费0积分--gc10-det yolo格式

    Abaqus软件应用于管中管系统深水管非线性动力分析:基于Tube-to-tube ITT单元的数值模拟

    内容概要:本文深入探讨了Abaqus软件在管中管系统深水管非线性动力分析中的应用,特别是基于Tube-to-tube ITT单元的数值模拟研究。文章首先介绍了管中管系统的基本概念及其在深海石油、天然气开发中的重要性。接着阐述了Abaqus软件的功能特点及其在复杂工程问题中的优势。随后详细讲解了如何在Abaqus中建立管中管系统的模型,包括定义材料属性、设定几何尺寸、处理接触关系等。还讨论了设置分析步和载荷的方法,强调了非线性动力分析的必要性。最后展示了求解与结果分析的具体步骤,并提供了相关代码片段以辅助理解和操作。 适合人群:从事海洋工程、石油天然气开发等领域工作的工程师和技术人员,尤其关注深水管系统非线性动力分析的专业人士。 使用场景及目标:适用于需要深入了解并掌握Abaqus软件在管中管系统深水管非线性动力分析中的应用方法,旨在提升对这类复杂系统的认识水平,优化设计方案,确保工程安全可靠。 其他说明:文中提供的代码片段有助于读者更快上手实际操作,使理论与实践相结合,便于后续工作中灵活运用所学知识。

    【电子设计竞赛】单相用电器分析监测装置设计:实现电器类别与工作状态的实时识别了文档的核心内容

    内容概要:本文档是2017年全国大学生电子设计竞赛的试题,针对单相用电器分析监测装置的设计与制作提出了具体任务和要求。该装置需具备学习和分析监测两种模式,在学习模式下测试并存储电器特征参量,在分析监测模式下实时指示用电器类别和工作状态。基本要求包括电器电流范围、可识别的电器工作状态数、响应时间、最小电流电器的自制等。发挥部分则鼓励提高装置性能,如学习功能优化、增强识别能力、低功耗设计以及无线传输等功能。文档还详细规定了参赛注意事项,如参赛队伍组成、比赛时间安排、纪律要求等,并给出了评分标准,涵盖设计报告、基本要求完成情况及发挥部分的表现; 适合人群:参加全国大学生电子设计竞赛的本科生及高职高专学生,特别是对电子设计、单相用电器监测感兴趣的团队; 使用场景及目标:①作为竞赛指南,帮助参赛队伍明确设计目标和要求;②指导参赛队伍进行单相用电器分析监测装置的设计与制作,确保满足竞赛的基本要求和发挥部分的要求; 其他说明:文档强调了参赛纪律,要求参赛者必须是有正式学籍的全日制在校生,并且在竞赛期间只能在学校指定场地内进行设计制作,不得与他人交流。此外,文档还提供了详细的评分标准,以确保评审过程的公平性和透明度。

    GB/T-7714-2015学位论文zotero格式更改csl文件

    GB/T-7714-2015学位论文zotero格式更改csl文件

    毕业论文-春磊引导页-极乐二次修改-整站商业源码.zip

    毕业论文-春磊引导页-极乐二次修改-整站商业源码.zip

    大学生就业指导.pdf

    大学生就业指导.pdf

    FIDIA数控主轴伺服驱动调试手册.pdf

    FIDIA数控主轴伺服驱动调试手册.pdf

    毕业论文-MIP建站平台 1.2.2加密版-整站商业源码.zip

    毕业论文-MIP建站平台 1.2.2加密版-整站商业源码.zip

    IDC数据中心布局与动力规划.pdf

    IDC数据中心布局与动力规划.pdf

    毕业论文-H5手机转盘活动游戏页面源码-整站商业源码.zip

    毕业论文-H5手机转盘活动游戏页面源码-整站商业源码.zip

    Python语言特性详解:函数参数传递、类与实例变量、装饰器及单例模式等核心技术

    内容概要:本文档涵盖了Python编程语言的多个重要特性和概念,包括函数参数传递、元类、静态方法与类方法的区别、类变量与实例变量的关系、自省特性、字典推导式、单下划线和双下划线的意义、字符串格式化、迭代器和生成器、`*args`和`**kwargs`的使用、面向切面编程(AOP)与装饰器、鸭子类型、函数重载、新式类与旧式类的区别、`__new__`和`__init__`的区别、单例模式的实现、作用域规则、线程全局锁(GIL)、协程、闭包、lambda函数、函数式编程、拷贝的区别、垃圾回收机制、列表操作、`is`关键字、文件读取方法、Python2与Python3的区别等。此外,还包括了一些操作系统、数据库、网络、数据结构等方面的知识点。 适合人群:具备一定编程基础,特别是对Python语言有一定了解的研发人员,尤其是工作1-3年的开发者。 使用场景及目标:①帮助读者深入了解Python语言的核心特性和高级用法;②为开发者提供解决实际编程问题的具体方法和技术;③为准备面试的程序员提供参考,涵盖常见的面试知识点。 其他说明:文档不仅提供了理论知识,还附带了大量的代码示例,便于读者理解和实践。部分内容链接了外部资源,供读者进一步深入学习。文档内容广泛,既适合日常编程学习,也适合面试准备。

    毕业论文-qiyeseo-整站商业源码.zip

    毕业论文-qiyeseo-整站商业源码.zip

    yolov5-simam

    加入注意力机制simam

    spring-boot-configuration-processor-1.5.11.RELEASE.jar中文-英文对照文档.zip

    # 压缩文件中包含: 中文-英文对照文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文-英文对照文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;

    毕业论文-素材库7.8.4 小程序前端+后端-整站商业源码.zip

    毕业论文-素材库7.8.4 小程序前端+后端-整站商业源码.zip

    HTML5对移动应用的影响.pdf

    HTML5对移动应用的影响.pdf

Global site tag (gtag.js) - Google Analytics