工作中遇到的问题现在做一下记录,原来可以好好显示的图片的程序,突然之间被告知显示不出来某张图片了。通过跟踪调试发现这张图片的尺寸比较大: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 显示大尺寸图片相关推荐

  1. Android显示Gif图片

    关于android显示gif图片的方法有许多种.我试了许多方法之后,觉得都不是很理想.庆幸的是,查看了这篇博客加载网络gif图片之后,我总算找到了理想的方法,在此博客的基础上,本博客将讲解得更详细,更 ...

  2. android 自定义控件gif压缩包,android显示gif图片(自定义控件以及属性)

    由于android所带的控件里面没有能够显示gif图片的 今天闲来无事,就来网上查查资料,打算搞一个能显示gif图片的自定义控件 网上的解决方法大致有三种 第一:先将gif图片分拆为N帧(由美工/软件 ...

  3. Android中如何加载显示大尺寸图片不发生OOM

    前言:当加载高清大图时,系统给每个应用分配的内存是有限的,如果一个资源图片太大,加载到内存中后,占用的内存空间也会很大,这样就会造成OOM.那在Android开发中如何正确加载高清大图呢? 采用Bit ...

  4. android显示大图片

    前言: 最近比较焦虑,感觉移动端的前景不太好,有些心塞. android的如何显示大图? 因为虚拟机对手机内存的限制,超过了就会内存溢出导致程序崩溃,假如我们必须要显示一个大图怎么办呢? 一般有两个方 ...

  5. Mono for Android 显示远程图片

    Main.axml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:an ...

  6. android 显示svg图片,Android显示SVG

    Glide中有显示svg的例子,链接如下 sample/svg 默认svg显示出来是比较小的,我们需要修改SvgDecoder.java文件,让svg的大小和ImageView一致 public Re ...

  7. android显示动态图片不显示,Android显示GIF图片实例代码

    最近.一个朋友跟我说想,我给她弄个闹钟APP软件...功能其实很简单...只需要弄个简单的闹钟.自己设计设计时间.然后时间到了的时候,闹铃放的声音是男朋友录制好的声音...于是就开始整了.... 第一 ...

  8. android 显示Gift图片

    代码很简单一看就明白怎么回事.直接打码,主要是记录以备不时之需; 布局文件 <RelativeLayout xmlns:android="http://schemas.android. ...

  9. android显示加密图片,求高手android怎样实现加密比如说文件加密图片加密等???...

    满意答案 zjsyyzy 2015.10.07 采纳率:49%    等级:9 已帮助:165人 安装文件加密方法如下: 1. 我们把360手机安全卫士下载到我们的手机了,我们要把它安装到我们的手机才 ...

  10. Android 超清大尺寸图片压缩转Base64中卡顿/速度优化问题整理(在子线程压缩Bitmap卡的主线程进度条走不动了。。。)

    最近遇到需求是前后端传输图片使用的是Base64,但是前端(Android 端)图片很大(尺寸很大4480 × 2520,质量也很大7-10M),需要压缩到一定尺寸(1280 × 960,当然还可以压 ...

最新文章

  1. RAC环境下的备份与恢复(二)
  2. su一键封面插件_插件分享丨一键制作SU爆炸分析图插件分享
  3. C语言的结构使用和结构对齐
  4. easyUI的combobox选中无法显示
  5. oracle 复制组删除,利用copy在ASM磁盘组之间迁移
  6. NLog日志写文件的一个性能问题
  7. CCF 201809-1 买菜
  8. openssh-在win7上的搭建
  9. 寺冈labelnet使用说明_基于imagenet数据集的ResNet50模型训练示例
  10. PHP生成海报 文字描边,php实现图片添加描边字和马赛克的方法
  11. 值传递与引用传递区别,具体表现
  12. 尝试加载 Oracle 客户端库时引发 BadImageFormatException。问题记录
  13. 米4s刷Linux,小米4S刷recovery教程_小米4S第三方recovery下载
  14. 金士顿 U盘群联 ps2251_60 量产
  15. 龙果 mycat mysql_龙果学院Spring Boot源码解析视频教程完整未加密(价值599)
  16. 求三维空间向量旋转角
  17. 查看linux的ubuntu版本,查看Ubuntu版本
  18. 输入两个正整数num1、num2,计算并输出它们的和、差、积、整数商和余数
  19. BeatSaber节奏光剑插件开发官方教程1-创建一个插件模板
  20. 对360沙盒的驱动的一点逆向分析

热门文章

  1. python的split函数作用_spilt函数 详解 for Python
  2. Katalon Recorder使用教程—安装
  3. Linux普通用户su root权限的开启和禁止
  4. 尚硅谷-TypeScript
  5. Email - Boss's concerns
  6. 怎样修心?不乱于心,不困于情。
  7. 数据库在软件开发中的作用是什么?
  8. 架构师之殇:一个反对“平台团队”的案例
  9. oracle crm系统叫什么,常用CRM软件有哪些?
  10. dnw linux 内核,Linux下使用DNW工具通过USB下载镜像