如何渲染可编辑图层

时间:2014-12-13 14:49:07

标签: android canvas bitmap layer

我正在编写一个图像合成应用程序,应该可以在不同的图层上排列图像。所以我目前所做的是在画布上合并(一个接一个地绘制一个位图)。 用户应该能够随时删除任何图层(也可以撤消)。

我的问题与内存管理有关:在将每个图层保留为内存中的位图对象时,我担心OutOfMemoryExceptions。但合并是一个问题:只要合并所有位图,就无法再将它们分开(显然)。 我想知道saveLayer,似乎你可以保存和恢复数据,但我真的不明白它是否对我有帮助。

我考虑过降低图层上图像的分辨率,但接下来的问题是“哪种分辨率是正确的?”弹出。毕竟分辨率取决于(动态)图层数量和可用系统内存。

任何人都有关于如何处理此要求的提案?

1 个答案:

答案 0 :(得分:1)

对于合并问题,如果您有多个画布,可能作为自定义ImageView的一部分,您可以动态添加为FrameLayout中的图层,该怎么办?然后,合成部分将由布局简单处理,您可以通过添加/删除FrameLayout中的视图来使您的可拖动图像显示/消失,而无需重新绘制未受影响的图像。

对于内存问题,我想不出很多想法,除了a)在给定设备屏幕大小的情况下将每层的最大分辨率设置为合理的东西,b)尝试使用像Bitmap.Config.RGB_565这样的压缩位图(在颜色保真度方面可能是不可接受的妥协),c)query the usable heap size并相应地限制层数。