是否可以在Android中创建文件支持的Canvas?

时间:2013-12-08 00:29:28

标签: android bitmap android-canvas

我想创建一个Canvas实例,该实例太大而无法由堆内存Bitmap支持,假设为5000x5000像素(约95MB)。我希望这个非常大的Canvas将所有各种绘制操作直接发送到位图文件。不幸的是,Android中的Bitmap类标记为final,因此我无法提供自己的实现。有没有人知道这是否以及如何实现?我对性能不是很感兴趣,10秒钟写几十个绘图操作就好了,目标是不会出现内存错误。

2 个答案:

答案 0 :(得分:0)

没有任何工具可以提供您要求的功能,即使有,也可以对文件进行此类操作,这将提供可怕的性能。

可能唯一合理的方法是仅存储绘图操作,并创建一个与设备屏幕大小相同的Canvas,它将作为while 5000x5000像素画布的“窗口”。有关详细说明,请参阅我在此处对相关问题的回答:Android - is there a possibility to make infinite canvas?

答案 1 :(得分:0)

我认为这是一个我认为理论上可行的想法,但可能需要付出太多努力:

创建一个Canvas的子类,其中包含许多较小的Canvas个对象。这些将代表整体Canvas的图块。这些瓷砖应该足够小,以便一次至少一个适合存储器。为每个内部图块Canvas创建一个文件,并使用它来存储来自Buffer的未压缩像素数据。

当整体Canvas上发生绘制操作时,需要确定需要绘制哪些图块。一次一个地将该磁贴的文件读入内存中的Bitmap并执行可能剪裁的绘图,然后将Bitmap数据保存回文件并关闭它。

从理论上讲,这听起来很可能,但实际上听起来似乎太多了。