【问题标题】:How to render editable layers如何渲染可编辑图层
【发布时间】:2014-12-13 14:49:07
【问题描述】:

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

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

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

有人对如何处理此要求提出建议吗?

【问题讨论】:

  • 一次你只处理一个图像,所以在内存中只保留两个位图:当前的一个和第二个是所有其他位图的合并集,当然你需要重建每个您选择要使用的其他位图的时间

标签: android canvas bitmap layer


【解决方案1】:

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

对于内存问题,我想不出很多想法,除了 a) 考虑到设备的屏幕尺寸,将每层的最大分辨率设置为合理的值,b) 尝试使用压缩位图,如 Bitmap.Config.RGB_565(带有可能在颜色保真度方面不可接受的妥协),c)query the usable heap size 并相应地限制层数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-08
    • 1970-01-01
    • 1970-01-01
    • 2018-09-28
    • 2019-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多