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,android)