Android:Canvas: trying to draw too large

Posted xinyu391

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android:Canvas: trying to draw too large相关的知识,希望对你有一定的参考价值。

项目中遇到一个异常:

 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的主要内容,如果未能解决你的问题,请参考以下文章

“Unable to locate package” while trying to install packages with APT

“Unable to locate package” while trying to install packages with APT

1213 - Deadlock found when trying to get lock; try restarting transaction

trie从入门到入殓(trie=try+die)trie from try to die

MySQL error : Deadlock found when trying to get lock; try restarting transaction

第9项:尽量使用try-with-resources而不是try-finally(Prefer try-with-resources to try-finally)