1.Bitmap概述

Android系统支持几种图片(.png (preferred), .jpg (acceptable), .gif (discouraged)), 其中Bitmap位图#ffffffff,包括图片透明度Alpha和RGB,图片质量很好,每一个像素位占4个字节,如果图片很大将会占据很大的内存空间。存储在SDCard的image很小,加载进内存可能就会很大。因此,对bitmap图像进行操作,应该特别小心,可能出现内存溢出问题。为此对于大图片,应该引入该图片的二次采样生成缩略图。

2.Bitmap缩略图

首先尝试通过字节数组或者流,只去加载图片的外边缘,此时必须指定BitmapFactory.Options 的inJustDecodeBounds成员名,将其只为true,一旦设置为true,BitmapFactory解码后返回值为null,通过Options的outHeight和outWidth可以获得图片的宽高。然后根据大小制定合适的缩放比例,通过options.inSampleSize,大大降低加载图片导致内存溢出的风险!

  1. /**
  2. * 根据图片字节数组,对图片可能进行二次采样,不致于加载过大图片出现内存溢出
  3. * @param bytes
  4. * @return
  5. */
  6. public static Bitmap getBitmapByBytes(byte[] bytes){
  7. //对于图片的二次采样,主要得到图片的宽与高
  8. int width = 0;
  9. int height = 0;
  10. int sampleSize = 1; //默认缩放为1
  11. BitmapFactory.Options options = new BitmapFactory.Options();
  12. options.inJustDecodeBounds = true;  //仅仅解码边缘区域
  13. //如果指定了inJustDecodeBounds,decodeByteArray将返回为空
  14. BitmapFactory.decodeByteArray(bytes, 0, bytes.length, options);
  15. //得到宽与高
  16. height = options.outHeight;
  17. width = options.outWidth;
  18. //图片实际的宽与高,根据默认最大大小值,得到图片实际的缩放比例
  19. while ((height / sampleSize > Cache.IMAGE_MAX_HEIGHT)
  20. || (width / sampleSize > Cache.IMAGE_MAX_WIDTH)) {
  21. sampleSize *= 2;
  22. }
  23. //不再只加载图片实际边缘
  24. options.inJustDecodeBounds = false;
  25. //并且制定缩放比例
  26. options.inSampleSize = sampleSize;
  27. return BitmapFactory.decodeByteArray(bytes, 0, bytes.length, options);
  28. }

Android_Bitmap_图片的二次采样并生成缩略图的更多相关文章

  1. iOS-带图片的二维码的生成(QRCode)

    https://blog.csdn.net/feng512275/article/details/82824650 2018年09月23日 20:29:45 筝风放风筝 阅读数:91   版权声明:本 ...

  2. Yii 图片FTP批量上传 并生成缩略图

    图片批量上传,前台使用 uploadify.swf,这个就不介绍了.这里使用两个扩展,一个是FTP上传的扩展,还有一个是生成缩略图的扩展地址:http://www.yiiframework.com/e ...

  3. java图片处理(加水印、生成缩略图)等之Thumbnailator库

    Thumbnailator 是一个为Java界面更流畅的缩略图生成库.从API提供现有的图像文件和图像对象的缩略图中简化了缩略过程,两三行代码就能够从现有图片生成缩略图,且允许微调缩略图生成,同时保持 ...

  4. jquery php ajax多图片上传.上传进度,生成缩略图

    本例用到其他2个php class.upload.php和 functions.php还有css和js以及img文件 下载地址为www.freejs.net/demo/91/down.zip 演示 J ...

  5. Android开发之Bitmap二次采样

    Bitmap二次采样,听着好像是一个高大上的事,其实也就那么回事,今天我们就来看看Bitmap的二次采样问题. 1.为什么要二次采样 OK,那么首先我要 解决的一个问题就是为什么我们要二次采样? 不知 ...

  6. nginx实时生成缩略图到硬盘上

    现在随着各终端的出现(手机,ipad等平板),以及各种终端的手机分辨率和尺寸都不同,现在手机用户流量都是宝,网上出现了各种各样的生成缩略图功能的架构,有使用php实时生成缩略图的,也有用nginx + ...

  7. 【Nginx】面试官竟然问我Nginx如何生成缩略图,还好我看了这篇文章!!

    写在前面 今天想写一篇使用Nginx如何生成缩略图的文章,想了半天题目也没想好,这个题目还是一名读者帮我起的.起因就是这位读者最近出去面试,面试官正好问了一个Nginx如何生成缩略图的问题.还别说,就 ...

  8. .NET使用ZXing.NET生成中间带图片的二维码

    很久之前就有写这样的代码了,只是一直没记录下来,偶然想写成博客. 把之前的代码封装成函数,以方便理解以及调用. 基于开源的 ZXing.NET 组件,代码如下: 先添加对ZXing.NET的引用,然后 ...

  9. .net core 的图片处理及二维码的生成及解析

    写代码这事,掐指算来已经十有余年. 从html到css到javascript到vbscript到c#,从兴趣到职业,生活总是失落与惊喜并存. 绝大部分时候,出发并不是因为知道该到哪里去,只是知道不能再 ...

随机推荐

  1. SHELL异常处理

    写SHELL好久了,经常被异常困扰,可竟然坚持了若干年没用过,回想以前服务过的公司,阿弥陀佛,罪过罪过.废话少说,希望此篇文章可以协助大家和我彻底结束SHELL脚本就是LINUX命令集合的初级阶段. ...

  2. Android基础新手教程——1.10 反编译APK获代替码&资源

    Android基础新手教程--1.10 反编译APK获代替码&资源 标签(空格分隔): Android基础新手教程 本节引言: "反编译Apk".看上去好像好像非常高端的样 ...

  3. MongoDB内存管理机制

    目前,MongoDB使用的是内存映射存储引擎,它会把磁盘IO操作转换成内存操作,如果是读操作,内存中的数据起到缓存的作用,如果是写操作,内存还可以把随机的写操作转换成顺序的写操作,总之可以大幅度提升性 ...

  4. testNG retry 失败的testcase只需要在xml中配置一个listener即可

    问题情况                                                  先说下问题情况,最近在做testNG与selenium集成做自动化测试的问题. 因为如果将t ...

  5. PHP视频学习一 mysql

    设置mysql.exe文件目录到环境变量Path中去,可能在cmd下面使用mysql,wind7试了一下好像要重启以后才生效 什么是数据库 数据库就是存储数据的地方,是保存在计算机(硬盘/内存)中的数 ...

  6. Jenkins的安装(最为简单的安装方法)

    1.Jenkins的安装(最为简单的安装方法) (1)下载Jenkins(一个war文件) (2)cmd运行:java -jar jenkins.war [Jenkins需要IDK1.5以上的版本] ...

  7. linux上源码编译安装mysql-5.6.28

    在 linux 上编译安装 mysql-.tar.gz http://www.mysql.com/ mysql下载地址: http://www.mysql.com/downloads/mysql/#d ...

  8. 【组队赛三】-D 优先队列 cf446B

    DZY Loves Modification Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u Sub ...

  9. Anroid 4大组件之android.app.Service

    android.app.Service A Service is an application component representing either an application's desir ...

  10. 工作log

    整理电脑, 发现这么个文档, 留个纪念... 1. 2016-11-17 ================================ 3.采集任务编制页面,表格表头点击实现升序/降序排列 5.s ...