在图像编辑器中支持大量图层?

时间:2011-01-18 16:25:05

标签: graphics image-processing mobile bitmap paint

我正在为移动设备编写类似Photoshop的程序,我想支持使用图层。最多,我一次可以在内存中存储大约7个位图。我试图看看我是否能够提供一种支持大量图层(例如10或20)而不使用大量内存的方法。

我目前的想法是:

  • 使用一个位图作为用户当前可以绘制和操作的活动图层。
  • 使用一个位图存储活动图层下面所有图层的展平版本。
  • 使用一个位图存储活动图层上方所有图层的展平版本。

当图层不是活动图层时,我可以将其写入磁盘并将其从内存中删除。当用户切换活动层时,我然后从磁盘检索图层并重新创建展平图像。

如果每个图层只有不透明度设置,这个想法就会显示出来,但如果图层可以有不同的混合模式(如屏幕和乘法),我认为它不会起作用。平坦的底层层可以正常工作,但如果其中一个使用混合模式并且活动层已更改,似乎我需要再次重新渲染所有顶层。

我可以使用哪种方法?我已经看过各种支持100层以上的绘图程序,所以必须有一些技巧。

1 个答案:

答案 0 :(得分:0)

嗯,我认为对于图层只有简单的不透明度的情况,你已经有了一个合理的方法,但如果他们有不同的混合模式,我可以看到问题。

一个建议可能是将图像切割成子块,例如尺寸为32x32,仅重新混合了某些内容已发生变化的地方。您可以在主内存中拥有一种子块缓存,这样,如果用户只编辑一个小区域,您就可以获得大多数时间所需的数据。这将是复杂的,但您仍然可以保留仅需要不透明度混合的连续图层,以潜在地提高性能。

我似乎记得Photoshop至少习惯这样做 - 他们可能有一个层次结构,但图像是分割块。