显示长图失败

我们知道,ImageView经常用来显示一些位图,但是不是所有的图片都能够正常显示的,很明显不是的,当图片超过了一定的大小之后,你会发现,调用setImageBitmap(Bitmap bitmap)方法之后,图片没有正常显示出来,并且可显示的区域也没有显示对应的图片,这是为什么呢?

测试

做了一个实验,将一个如图大小的Bitmap设置给ImageView,图片没有显示出来,并且出现了如下异常,
Bitmap too large to be uploaded into a texture , 原来在硬件加速的时候,对图片的大小是有限制,不同设备的最大值不同。但是,在程序中并没有捕获到这个exception, 结果就是是程序也不奔溃,图片也显示不出来。只有看log才能发现这个异常信息。具体在stackoverflow 上面也有相关描述:https://stackoverflow.com/questions/7428996/hw-accelerated-activity-how-to-get-opengl-texture-size-limit

一般我们可以通过如下方法获取得到你的设备能够支持的最大图片宽高。

    /*** Returns the maximum allowed height for bitmaps drawn with this canvas.* Attempting to draw with a bitmap taller than this value will result* in an error.** @see #getMaximumBitmapWidth()*/public int getMaximumBitmapHeight() {return MAXMIMUM_BITMAP_SIZE;}/*** Returns the maximum allowed height for bitmaps drawn with this canvas.* Attempting to draw with a bitmap taller than this value will result* in an error.** @see #getMaximumBitmapWidth()*/public int getMaximumBitmapHeight() {return MAXMIMUM_BITMAP_SIZE;}

如何显示长图

如上,我们知道大小的显示是因为硬件加速的影响,那么我们简单粗暴的方法就是调用方法setLayerType(View.LAYER_TYPE_SOFTWARE, null);设置为软件加速,但这样子会带来另外一个问题,图片显示异常,因为高度比较大,所以显示出来宽度就被压缩了。如果图片不能够放大缩小的话,根本就看不清图片。如果你的项目较容易引入开源框架的话,可以考虑使用开源框架PhotoView来显示,他里面就实现了手势放大缩小等操作。要不然也可以利用google提供的BitmapRegionDecoder类去扩展ImageView的相关功能来实现。在下面的相关资料有详细的介绍。

相关资料

  • http://blog.zfdang.com/2013/03/summary-of-image-processing-in-android/
  • http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/1021/3607.html

ImageView显示长图相关推荐

  1. android 大图长图显示,Android如何显示长图

    本人无聊就喜欢看看微博,发现新浪微博的长图显示很有意思,于是去研究了一下. 首先如果你直接把一张长图set到imageView上,会提示你一个异常 W/OpenGLRenderer(6797): Bi ...

  2. Android加载长图滑动显示

    1.记录下学到的Android加载长图写法以备后用 首先准备一张长图.这里把图片先放到项目的 assets文件夹下:命名为big.png 然后开始自定义显示长图的view :BigView impor ...

  3. Flutter长图显示,自定义显示图片的指定区域

    需求 话不多说,直切正题!我们经常会遇到一个需求,在在一个定高的卡片中显示长图,如下图所示. 假如我们要显示这个长图.如果不考虑自定义显示长图的区域,这个很好实现,没什么可说的. Container( ...

  4. 小程序生成长图(预览,不限高度)+小程序码+小程序码中间logo换成自定义logo

    上条博客已经介绍了如何云调用生成小程序码,链接地址: https://blog.csdn.net/mingjuna2010/article/details/92796711 这条博客我们来介绍小程序中 ...

  5. android 照片拼接长图_android多图拼接长图并合理显示

    android多图拼接长图并合理显示 发布时间:2018-04-06 09:31, 浏览次数:541 , 标签: android 以前说过了 重叠部分图片合成,今天说一下 canvas.drawBit ...

  6. android 照片拼接长图_android多图拼接长图并合理显示-Go语言中文社区

    以前说过了 重叠部分图片合成,今天说一下canvas.drawBitmap拼接长图 先上效果gif 需求:多图拼接长图,长图大小 宽度为屏幕,高度自己不变形成比例 核心源码1.:final int m ...

  7. 显示适应手机屏幕宽度的长图

    如果要显示普通的图片,现在的显示图片框架主要有Glide,Picasso,Fresco,还有已经停止维护更新的 Image Loader.之前项目中遇到要显示一个长图(宽高比远大于普通手机的宽高比), ...

  8. 制作HTML长图的APP,长图制作工具 显示只是一张图片,点开一看却发现有很多张图片|制作长图软件...

    小编经常在刷微博的时候看到一些挺好看的图片,点开一看发现原来下面还有很多类型的图片.看微博里面的文章也是这样的,点开一看才发现有更多精彩的内容.其实不仅仅是微博,很多地方都会有长图的使用,那这种长图到 ...

  9. UIScrollView截长图

    iOS UIScrollView截长图优化 保留页面上的阴影等细节显示. extension UIScrollView {/**scrollview截长图可以保留阴影图片拼接*/func snapSh ...

最新文章

  1. mysql权限的误操作的恢复
  2. deepfefm 算法思维导图
  3. Record of redevelopment of website
  4. 《机器学习实战》笔记(01):机器学习基础
  5. NILMTK——经典数据集REDD介绍和使用
  6. termux配置python安装kali_安卓安装kali linux之Termux
  7. php callback 多线程,PHP cURL并发里的callback那行是什么效能
  8. Docker pull镜像报错问题
  9. SuperMap_iClient3D_10.2.1_for_WebGL下载
  10. Spring cloud (1)---Eureka 宣布闭源,Spring Cloud 何去何从?
  11. java 生成二维码,并跟其他图合成新图 图片添加水印
  12. sqlserver 没有备份误删数据_数据库服务器如何备份详细教程!
  13. VS2015安装教程
  14. Modern C++ JSON nlohmann::json 使用详解
  15. Unrecognized field ResultCode (class com.xiaocaimi.loan.pojo.vo.LiuLiuYuResponse), not marked as i
  16. ssrf漏洞修复(ssrf漏洞修复方式)
  17. EfficientNet 简介
  18. 网页游戏老手村《梦幻西游网页版》项目开发经验分享
  19. 计算机与网络安全经历了几个阶段,网络信息安全知识:根据互联网的发展阶段,互联网治理分为三个层面,即结构层面、功能层面、意识层面。确立网络规范属于互联网意识层面的治理。()...
  20. 逐步实现一个简易的飞机大战(c++)

热门文章

  1. Sklearn包含的常用算法
  2. 用于道路场景实时准确语义分割的深度双分辨率网络
  3. 用Python打造一个AI作家为你写诗(附源码)
  4. python中打印5个空格的代码是_如何在Python中打印空格?
  5. html5添加背景音乐
  6. Flashy Graphs Sans Flash
  7. 引用vant cdn,vant组件只显示最上面一行
  8. 方舟生存进化服务器文件设置,方舟:生存进化 参数文件ini设置教程 ini设置
  9. Centos 7下TP-LINK tg 3269e/RTL8168网络唤醒与安装网卡驱动中出现的错误
  10. 【实验一】基于决策树的英雄联盟游戏胜负预测实验报告