我想创建一个Canvas
实例,该实例太大而无法由堆内存Bitmap
支持,假设为5000x5000像素(约95MB)。我希望这个非常大的Canvas
将所有各种绘制操作直接发送到位图文件。不幸的是,Android中的Bitmap
类标记为final
,因此我无法提供自己的实现。有没有人知道这是否以及如何实现?我对性能不是很感兴趣,10秒钟写几十个绘图操作就好了,目标是不会出现内存错误。
答案 0 :(得分:0)
没有任何工具可以提供您要求的功能,即使有,也可以对文件进行此类操作,这将提供可怕的性能。
可能唯一合理的方法是仅存储绘图操作,并创建一个与设备屏幕大小相同的Canvas
,它将作为while 5000x5000像素画布的“窗口”。有关详细说明,请参阅我在此处对相关问题的回答:Android - is there a possibility to make infinite canvas?
答案 1 :(得分:0)
我认为这是一个我认为理论上可行的想法,但可能需要付出太多努力:
创建一个Canvas
的子类,其中包含许多较小的Canvas
个对象。这些将代表整体Canvas
的图块。这些瓷砖应该足够小,以便一次至少一个适合存储器。为每个内部图块Canvas
创建一个文件,并使用它来存储来自Buffer
的未压缩像素数据。
当整体Canvas
上发生绘制操作时,需要确定需要绘制哪些图块。一次一个地将该磁贴的文件读入内存中的Bitmap
并执行可能剪裁的绘图,然后将Bitmap
数据保存回文件并关闭它。
从理论上讲,这听起来很可能,但实际上听起来似乎太多了。