项目中遇到一个异常:

java.lang.RuntimeException: Canvas: trying to draw too large(129836212bytes) bitmap.

Canvas 要绘制文档图像,当用户放大时,会生成很大的图像来绘制。

4873×6661 分辨率 *4 就是 这里的 129836212bytes bitmap了。

大概3000万像素的图像,确实比较恐怖。

解决方案分析:
1. 图像虽然这么大,但屏幕确没这么大,可以只绘制 需要显示的部分。
   没验证 是否可行。

2. 图像虽然这么大,但屏幕确没这么大,可以在生成图像时,只生成要显示的部分。

这么做能够解决问题,但需要更复杂的逻辑来协调:
 a. 确定要生成的区域,确定好绘制的偏移
 b. 要控制在缩放、滑动过程中不会去生成图像(要不然一个滑动动作触发很多生成操作,并且生成的图像 较多的重合。

3. 其他方法如Picture,应该可以绕过这个异常。
  但图像内存占用过大仍是个问题,同时,生成图像过程耗时也会增多。

Android:Canvas: trying to draw too large相关推荐

  1. java.lang.RuntimeException: Canvas: trying to draw too large(203212800bytes) bitmap.

    java.lang.RuntimeException: Canvas: trying to draw too large(203212800bytes) bitmap. 异常原因分析:Canvas绘制 ...

  2. 关于报错问题:Canvas: trying to draw too large(180633600bytes) bitmap

    1.做了个简单的个人课程表App 2.遇到这个错误后的思考 可能是自己每个背景图片都太花哨了而且占内存过大 找百度关于压缩图片内存大小的各种方法 1.直接修改图片的格式,这样做的后果就是图片会变成适应 ...

  3. Android Canvas类介绍和Android Draw Rect 坐标图示

    当我们调整好画笔之后,现在需要绘制到画布上,这就得用Canvas类了.在Android中既然把Canvas当做画布,那么就可以在画布上绘制我们想要的任何东西.除了在画布上绘制之外,还需要设置一些关于画 ...

  4. Android Canvas总结

    0x00 前言 在Android开发中,有时产品需求会要我们实现一个复杂的控件,如果控件不是常用的类型,这时候我们不得不写一个自定义的控件来实现. 自定义一个控件,目前一般通过继承View或者Surf ...

  5. android 画布控件,Android canvas画图操作之切割画布实现方法(clipRect)

    本文实例讲述了Android canvas画图操作之切割画布实现方法.分享给大家供大家参考,具体如下: android切割画布的历程不算很难,可是理解起来也比较麻烦,这里写一下我的理解 但是不一定正确 ...

  6. Android Canvas画布的详解与使用,以及View的绘画(一)

    Canvas:画布 * The Canvas class holds the "draw" calls. To draw something, you need * 4 basic ...

  7. android canvas添加文字居中,android Canvas drawText 文字居中

    1首先利用canvas获取画布的宽高, //获取屏幕的宽和高 int width = canvas.getWidth(); int height = canvas.getHeight(); 2获取文字 ...

  8. android 自定义画笔,在Android Canvas中使用撤销/重做操作的自定义画笔

    我想使用自定义画笔&撤消/重做操作实现画布绘制应用程序.首先,我的代码完美工作,无需使用自定义画笔(包括撤消/重做操作).根据这个答案How to make custom brush for ...

  9. Android Canvas类

    1. Canvas类 Canvas主要用于2D绘图,它提供了很多相应的drawXxx()方法,Canvas的获取方式有三种 重写View的onDraw(Canvas)方法 @Override prot ...

  10. Android bitmap加载占用内存分析(draw too large bitmap)

    一.问题描述 最近被反馈了一个导致应用崩溃的bug,在极少低版本的手机会必现.对于能必现的bug,还是有十足的把握解决的,毕竟不解决也不能下班. 简单看了一眼如下的崩溃日志. 创建一个132M的bit ...

最新文章

  1. Angular应用中tsconfig.json文件配置说明及配置全局路径映射
  2. JAVA并发之多线程基础(2)
  3. 循序渐进学Oracle之索引、权限、角色
  4. java 多个 panel_在Java中,每次我向JPanel添加多个东西时,第二...
  5. 10 结构型模式-----装饰模式
  6. 精确控制div的高度
  7. tensorflow随笔-tf.group
  8. nand ubi -1 nand基础
  9. 联想王传东回应“宁愿放弃5G也不选华为”言论:纯属谣言
  10. 使用 RxJS 实现 JavaScript 的 Reactive 编程
  11. JAVA重要基础之反射
  12. 每周荐书:OpenCV、自然语言、SpringBoot2
  13. 重新认识HTML中的p标签
  14. BZOJ4033 [HAOI2015]树上染色 【树形dp】
  15. 一个企图用代码偷懒计算测量学闭合导线各项数据的屑是否有错
  16. 单应矩阵公式推导及计算
  17. 【数据库】Hive SQL 正则表达式进阶二(regexp_extract函数进阶使用)
  18. ContentProvider跨进程注册、启动流程源码解析
  19. 电脑进入pe时蓝屏_电脑进入u盘pe系统蓝屏了怎么办
  20. 如何在线免费对PDF文档进行解密

热门文章

  1. 批量打印html文档,vue项目中使用Lodop实现批量打印html页面和pdf文件
  2. 基本函数发生器函数须知
  3. 48脚STM32内部基准电压校准ADC的一些心得记录
  4. Win10提示“为了对电脑进行保护,已经阻止此应用”如何解决
  5. CH7511BeDP转LVDS显示屏转接板CS5211电路图
  6. 360抢票王验证码自动识别真的那么牛吗?
  7. IDEA中amend
  8. Windows安装虚拟机VMware
  9. photoshop文字使用技巧
  10. One-dimensional Japanese Crossword(codeforces 712A)