Android 显示大尺寸图片
工作中遇到的问题现在做一下记录,原来可以好好显示的图片的程序,突然之间被告知显示不出来某张图片了。通过跟踪调试发现这张图片的尺寸比较大:600*4336 。图片变大怎么就不显示了呢?原来Android设备对于图片的显示有尺寸上的限制,最大不能超过4096*4096.找到问题了,就好解决了。目的是是图片显示出来并且图片不会失真。在加载图片文件的时候,要对大图片进行重新采样。
BitmapFactory.decodeFile(path,option)//通过这个函数重新采样图片
重要的参数:BitmapFactory.Option
options.inJustDecodeBounds = false/true;
//图片压缩比例.
options.inSampleSize = scale;
API这样说:如果options.inJustDecodeBounds 值设为true那么将不返回实际的bitmap,也不给其分配内存空间,避免内存溢出。但是可以查询图片的信息。如图片的长宽:options.outHeight (图片高度)和option.outWidth(图片宽度))。
Options.inSampleSize。可以充分利用它实现缩放。
如果被设置为一个值> 1,要求解码器解码出原始图像的一个子样本,返回一个较小的bitmap,以节省存储空间。
例如:inSampleSize =3,则取出的缩略图的宽和高都是原始图片的1/3,图片大小就为原始大小的1/9。对于任何值< = 1的同样处置为1。
根据这个思路可以得到以下代码:
private Bitmap setThumbnailImageAndSave(final ImageView imgView, File imgFile) {int targetW = imgView.getWidth();int targetH = imgView.getHeight();//得到图片的长宽BitmapFactory.Options bmOptions = new BitmapFactory.Options();bmOptions.inJustDecodeBounds = true;BitmapFactory.decodeFile(imgFile.getAbsolutePath(), bmOptions);int photoW = bmOptions.outWidth;int photoH = bmOptions.outHeight;//获取抽样比例int scaleFactor = 1;if ((targetW > 0) || (targetH > 0)) {scaleFactor = Math.min(photoW / targetW, photoH / targetH);if (scaleFactor == 0) {scaleFactor = 1;} else if (scaleFactor == 1) {//最少采样边长的1/2scaleFactor += 1;}}bmOptions.inJustDecodeBounds = false;bmOptions.inSampleSize = scaleFactor;bmOptions.inPurgeable = true;Bitmap bitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath(), bmOptions);return bitmap;}
通过测试可以显示尺寸比较大的图片。
Android 显示大尺寸图片相关推荐
- Android显示Gif图片
关于android显示gif图片的方法有许多种.我试了许多方法之后,觉得都不是很理想.庆幸的是,查看了这篇博客加载网络gif图片之后,我总算找到了理想的方法,在此博客的基础上,本博客将讲解得更详细,更 ...
- android 自定义控件gif压缩包,android显示gif图片(自定义控件以及属性)
由于android所带的控件里面没有能够显示gif图片的 今天闲来无事,就来网上查查资料,打算搞一个能显示gif图片的自定义控件 网上的解决方法大致有三种 第一:先将gif图片分拆为N帧(由美工/软件 ...
- Android中如何加载显示大尺寸图片不发生OOM
前言:当加载高清大图时,系统给每个应用分配的内存是有限的,如果一个资源图片太大,加载到内存中后,占用的内存空间也会很大,这样就会造成OOM.那在Android开发中如何正确加载高清大图呢? 采用Bit ...
- android显示大图片
前言: 最近比较焦虑,感觉移动端的前景不太好,有些心塞. android的如何显示大图? 因为虚拟机对手机内存的限制,超过了就会内存溢出导致程序崩溃,假如我们必须要显示一个大图怎么办呢? 一般有两个方 ...
- Mono for Android 显示远程图片
Main.axml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:an ...
- android 显示svg图片,Android显示SVG
Glide中有显示svg的例子,链接如下 sample/svg 默认svg显示出来是比较小的,我们需要修改SvgDecoder.java文件,让svg的大小和ImageView一致 public Re ...
- android显示动态图片不显示,Android显示GIF图片实例代码
最近.一个朋友跟我说想,我给她弄个闹钟APP软件...功能其实很简单...只需要弄个简单的闹钟.自己设计设计时间.然后时间到了的时候,闹铃放的声音是男朋友录制好的声音...于是就开始整了.... 第一 ...
- android 显示Gift图片
代码很简单一看就明白怎么回事.直接打码,主要是记录以备不时之需; 布局文件 <RelativeLayout xmlns:android="http://schemas.android. ...
- android显示加密图片,求高手android怎样实现加密比如说文件加密图片加密等???...
满意答案 zjsyyzy 2015.10.07 采纳率:49% 等级:9 已帮助:165人 安装文件加密方法如下: 1. 我们把360手机安全卫士下载到我们的手机了,我们要把它安装到我们的手机才 ...
- Android 超清大尺寸图片压缩转Base64中卡顿/速度优化问题整理(在子线程压缩Bitmap卡的主线程进度条走不动了。。。)
最近遇到需求是前后端传输图片使用的是Base64,但是前端(Android 端)图片很大(尺寸很大4480 × 2520,质量也很大7-10M),需要压缩到一定尺寸(1280 × 960,当然还可以压 ...
最新文章
- RAC环境下的备份与恢复(二)
- su一键封面插件_插件分享丨一键制作SU爆炸分析图插件分享
- C语言的结构使用和结构对齐
- easyUI的combobox选中无法显示
- oracle 复制组删除,利用copy在ASM磁盘组之间迁移
- NLog日志写文件的一个性能问题
- CCF 201809-1 买菜
- openssh-在win7上的搭建
- 寺冈labelnet使用说明_基于imagenet数据集的ResNet50模型训练示例
- PHP生成海报 文字描边,php实现图片添加描边字和马赛克的方法
- 值传递与引用传递区别,具体表现
- 尝试加载 Oracle 客户端库时引发 BadImageFormatException。问题记录
- 米4s刷Linux,小米4S刷recovery教程_小米4S第三方recovery下载
- 金士顿 U盘群联 ps2251_60 量产
- 龙果 mycat mysql_龙果学院Spring Boot源码解析视频教程完整未加密(价值599)
- 求三维空间向量旋转角
- 查看linux的ubuntu版本,查看Ubuntu版本
- 输入两个正整数num1、num2,计算并输出它们的和、差、积、整数商和余数
- BeatSaber节奏光剑插件开发官方教程1-创建一个插件模板
- 对360沙盒的驱动的一点逆向分析