Android_Bitmap_图片的二次采样并生成缩略图
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,大大降低加载图片导致内存溢出的风险!
- /**
- * 根据图片字节数组,对图片可能进行二次采样,不致于加载过大图片出现内存溢出
- * @param bytes
- * @return
- */
- public static Bitmap getBitmapByBytes(byte[] bytes){
- //对于图片的二次采样,主要得到图片的宽与高
- int width = 0;
- int height = 0;
- int sampleSize = 1; //默认缩放为1
- BitmapFactory.Options options = new BitmapFactory.Options();
- options.inJustDecodeBounds = true; //仅仅解码边缘区域
- //如果指定了inJustDecodeBounds,decodeByteArray将返回为空
- BitmapFactory.decodeByteArray(bytes, 0, bytes.length, options);
- //得到宽与高
- height = options.outHeight;
- width = options.outWidth;
- //图片实际的宽与高,根据默认最大大小值,得到图片实际的缩放比例
- while ((height / sampleSize > Cache.IMAGE_MAX_HEIGHT)
- || (width / sampleSize > Cache.IMAGE_MAX_WIDTH)) {
- sampleSize *= 2;
- }
- //不再只加载图片实际边缘
- options.inJustDecodeBounds = false;
- //并且制定缩放比例
- options.inSampleSize = sampleSize;
- return BitmapFactory.decodeByteArray(bytes, 0, bytes.length, options);
- }
Android_Bitmap_图片的二次采样并生成缩略图的更多相关文章
- iOS-带图片的二维码的生成(QRCode)
https://blog.csdn.net/feng512275/article/details/82824650 2018年09月23日 20:29:45 筝风放风筝 阅读数:91 版权声明:本 ...
- Yii 图片FTP批量上传 并生成缩略图
图片批量上传,前台使用 uploadify.swf,这个就不介绍了.这里使用两个扩展,一个是FTP上传的扩展,还有一个是生成缩略图的扩展地址:http://www.yiiframework.com/e ...
- java图片处理(加水印、生成缩略图)等之Thumbnailator库
Thumbnailator 是一个为Java界面更流畅的缩略图生成库.从API提供现有的图像文件和图像对象的缩略图中简化了缩略过程,两三行代码就能够从现有图片生成缩略图,且允许微调缩略图生成,同时保持 ...
- jquery php ajax多图片上传.上传进度,生成缩略图
本例用到其他2个php class.upload.php和 functions.php还有css和js以及img文件 下载地址为www.freejs.net/demo/91/down.zip 演示 J ...
- Android开发之Bitmap二次采样
Bitmap二次采样,听着好像是一个高大上的事,其实也就那么回事,今天我们就来看看Bitmap的二次采样问题. 1.为什么要二次采样 OK,那么首先我要 解决的一个问题就是为什么我们要二次采样? 不知 ...
- nginx实时生成缩略图到硬盘上
现在随着各终端的出现(手机,ipad等平板),以及各种终端的手机分辨率和尺寸都不同,现在手机用户流量都是宝,网上出现了各种各样的生成缩略图功能的架构,有使用php实时生成缩略图的,也有用nginx + ...
- 【Nginx】面试官竟然问我Nginx如何生成缩略图,还好我看了这篇文章!!
写在前面 今天想写一篇使用Nginx如何生成缩略图的文章,想了半天题目也没想好,这个题目还是一名读者帮我起的.起因就是这位读者最近出去面试,面试官正好问了一个Nginx如何生成缩略图的问题.还别说,就 ...
- .NET使用ZXing.NET生成中间带图片的二维码
很久之前就有写这样的代码了,只是一直没记录下来,偶然想写成博客. 把之前的代码封装成函数,以方便理解以及调用. 基于开源的 ZXing.NET 组件,代码如下: 先添加对ZXing.NET的引用,然后 ...
- .net core 的图片处理及二维码的生成及解析
写代码这事,掐指算来已经十有余年. 从html到css到javascript到vbscript到c#,从兴趣到职业,生活总是失落与惊喜并存. 绝大部分时候,出发并不是因为知道该到哪里去,只是知道不能再 ...
随机推荐
- PD 之 连接数据库并导出数据及生成PDM文件
使用PowerDesigner工具,连接数据库并导出数据及生成PDM文件. 1.建立连接 “以管理员身份运行”打开PowerDesigner,右键“Workspace”→“New”→“Physical ...
- 将Spring-boot应用部署到Docker容器
1:Docker中设置阿里云加速 使用阿里云的加速器,因为在使用docker的时候,会需要从docker的网站下载镜像文件,下载速度可能会很慢.获得阿里云加速,需要登录阿里云开发者平台,然后点击右侧的 ...
- angularjs显示html片段
ngBindHtml <div ng-controller="ExampleController"> <p ng-bind-html="myHTML&q ...
- C#的ThreadStart 和 Thread
多线程,new Thread(t1);和new Thread(new ThreadStart(t1));有什么区别 没有区别. 前者,是c#的语法.也就是说是编译器帮你改写为第二种形式. 因此你要搞清 ...
- java动态代理_aop
(一)代理概述 1.问题:要为已存在的多个具有相同接口的目标类的各个方法增加一些系统功能,例如,异常处理.日志.计算方法的运行时间.事务管理等等,如何去做? 解答:编写一个与目标类具有相同接口的代理类 ...
- 什么是XML RPC?
# -*- coding: cp936 -*- #python 27 #xiaodeng #什么是XML RPC? #中文叫:远程过程调用 #使用http协议做传输协议的rpc机制,使用xml文本的方 ...
- GitLab概念——Group、Project、Member
概念说明: Group是一个父子结构的目录 Group每一级都可以设置关联的Member,同时每一级下都可以创建项目 Group关联的Member和Member对应的权限,会继承到Group下的所有P ...
- win7 远程桌面连接centos 6.5
首先安装tigervnc-server: yum install tigervnc-server 安装好后,设置 vi /etc/sysconfig/vncservers 'man vncpasswd ...
- 电信网关-天翼网关-GPON-HS8145C设置桥接路由拨号认证
需求描述: 自从用了电信的200M光纤,解析卡成狗.打开域名3秒左右,不常见的域名8s左右.怀疑电信的网关有问题,故想让路由器拨号认证,进而设置dns解析域名 修改为路由器拨号认证,域名解析缓慢依然没 ...
- QTableView中使用Delegate方式来实现对特定列的文本进行换行
问题:由于表格的一个列中,有个别文本过长,默认情况下,QTableView不支持对某列的文本换行,所以需要通过Delegate方式来实现这样的效果 头文件的Delegate #pragma once ...