Android进阶2之图片缩略图(解决大图片溢出问题)
正在做一个软件其中涉及到一些关于缩略图的知识。还有就是大图片的溢出问题,也可以通过缩略图的方式避免。
主要是通过BitmapFactory.Options 来实现。
Options中有个属性inJustDecodeBounds。我们可以充分利用它,来避免大图片的溢出问题。他是什么原理呢?
API这样说:如果该值设为true那么将不返回实际的bitmap,也不给其分配内存空间这样就避免内存溢出了。但是允许我们查询图片的信息这其中就包括图片大小信息(
options.outHeight(图片原始高度)和option.outWidth(图片原始宽度))。
Options中有个属性inSampleSize。我们可以充分利用它,实现缩放。
如果被设置为一个值> 1,要求解码器解码出原始图像的一个子样本,返回一个较小的bitmap,以节省存储空间。
例如,inSampleSize = = 2,则取出的缩略图的宽和高都是原始图片的1/2,图片大小就为原始大小的1/4。
对于任何值< = 1的同样处置为1。
那么相应的方法也就出来了,通过设置inJustDecodeBounds为true,获取到outHeight(图片原始高度)和outWidth(图片的原始宽度),然后计算一个inSampleSize(缩放值),
然后就可以取图片了,这里要注意的是,inSampleSize可能小于0,必须做判断。
实现步骤:
第一步:BitmapFactory.Option
设置inJustDecodeBounds为true
第二步:BitmapFactory.decodeFile(path,option)方法
解码图片路径为一个位图。如果指定的文件名是空的,或者不能解码到一个位图,函数将返回null[空值]。
获取到outHeight(图片原始高度)和outWidth(图片的原始宽度)
第三步:计算缩放比例,也可以不计算,直接给它设定一个值。
options.inSampleSize = "你的缩放倍数";
如果是2就是高度和宽度都是原始的一半。
第四步:设置options.inJustDecodeBounds = false;
重新读出图片
bitmap = BitmapFactory.decodeFile(path, options);
具体实现:
package xiaosi.compress; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import android.widget.ImageView; public class Compress extends Activity { /** Called when the activity is first created. */ private ImageView image = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); image = (ImageView) findViewById(R.id.image); image.setImageBitmap(decodeBitmap()); } public Bitmap decodeBitmap() { BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; // 通过这个bitmap获取图片的宽和高 Bitmap bitmap = BitmapFactory.decodeFile("/sdcard/MTXX/3.jpg", options); if (bitmap == null) { System.out.println("bitmap为空"); } float realWidth = options.outWidth; float realHeight = options.outHeight; System.out.println("真实图片高度:" + realHeight + "宽度:" + realWidth); // 计算缩放比 int scale = (int) ((realHeight > realWidth ? realHeight : realWidth) / 100); if (scale <= 0) { scale = 1; } options.inSampleSize = scale; options.inJustDecodeBounds = false; // 注意这次要把options.inJustDecodeBounds 设为 false,这次图片是要读取出来的。 bitmap = BitmapFactory.decodeFile("/sdcard/MTXX/3.jpg", options); int w = bitmap.getWidth(); int h = bitmap.getHeight(); System.out.println("缩略图高度:" + h + "宽度:" + w); return bitmap; } }
效果图:
一起见证菜鸟的起飞。。。。。。
Android进阶2之图片缩略图(解决大图片溢出问题)相关推荐
- Android进阶之路 - 批量下载、缓存图片
在日常项目开发中,关于图片批量下载,数据缓存的相关功能比比皆是,这次也是去年在项目中需要在本地缓存商品数据,所以用到了批量下载的功能,特此记录 ~ 关联篇 Android进阶之路 - 批量下载.缓存图 ...
- Android进阶之路 - 批量下载、缓存图片、视频
之前已经记录过,批量下载图片和缓存本地的方式,此篇主要记录批量下载图片.视频,同时缓存在本地的功能实现 关联篇 Android进阶之路 - 批量下载.缓存图片 Android进阶之路 - 批量下载.缓 ...
- 缩放图片,解决bitmap 内存溢出out of memory的问题
缩放图片,解决bitmap 内存溢出out of memory的问题 参考文章: (1)缩放图片,解决bitmap 内存溢出out of memory的问题 (2)https://www.cnblog ...
- layer 点击图片缩略图弹出图片原图
项目中有一个需求,点击图片的缩略图可以弹出弹层,查看图片原图:点击关闭按钮或点击遮罩层部分关闭图片 代码实现如下: 项目是单页面,有多处需要用到查看图片详情,于是在主页面放置一个图片弹层的容器 < ...
- 将切割后的小图片还原为大图片
本文可以看作是我的这篇博客(切割过程)的续集. 一.数据说明: (1)原始大图片:6000*6000 (2)小图片:512*512,且相邻小图片之间的重叠率为50% (3)根据切割的要求,原图共被分割 ...
- win7 不显示图片缩略图(解决方法)
情况如下: 图片文件没有显示缩略图,更改过多种显示方式都没有用,上网看了下,好多人说需要装什么插件,回来想到是不是文件夹设置的问题,一查看,果然找到原因,解决方法如下: 点击工具栏的"组织& ...
- Android进阶必备:滑动冲突解决与事件分发机制(附视频讲解)这篇看完还不懂请寄刀片
1.前言 Android学习一段时间,需求做多了必然会遇到滑动冲突问题,比如在一个ScrollView中要嵌套一个地图View,这时候触摸移动地图或者放大缩小地图就会变得不太准确甚至没有反应,这就是遇 ...
- android无限轮播banner图片并且解决banner图片只有2张出现白板的情况,触摸即不轮播
//主页面代码 public class BannerActivity extends Activity { private ViewPager mViewPager; private Lin ...
- android进入相机不显示缩略图,无法显示图片,缩略图可以
权限记得填写上可读可写的两个权限,大图无法显示可能是内存溢出导致的,拍的照片过大需要压缩一下再显示, 压缩示例: public static void compressBmpToFile(Bitmap ...
最新文章
- zts在c语言中的意思,C语言入门-全局变量 - osc_wna7tzts的个人空间 - OSCHINA - 中文开源技术交流社区...
- 新概念英语(1-73)The way to King Street
- py-faster-rcnn源码解读系列
- Codeforces732D Exams
- dojo/request模块整体架构解析
- 【自适应(盲)均衡5】分数间隔均衡器基本原理及应用(更正数字通信翻译版中公式错误)
- cloudsim样例描述
- scp(安全副本)到ec2实例,无需密码
- c语言实现shellcode转换工具
- Windows Server 2008 R2入门之FTP服务器
- uni-app 编译后微信h5打开APP,并且打开相应的页面
- 4款简单实用的的服务器文件管理工具推荐
- ANSI字符集和Unicode字符集
- 插值法综合实例用matlab解决,matlab 插值法
- 写给自己 NOI2012流水帐
- Web前端下载文件的几种常见方式
- 前端页面中根据链接随机生成二维码
- win10与内置ubuntu之间复制粘贴操作
- 安卓app开发工具_四川智慧社区安卓手机app开发多少钱
- 安装 ubuntu16.04 ROS2 超过5分钟你打我 后带 测试talker listener demo