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

Graphics 在图像编辑器中支持大量层?,graphics,image-processing,mobile,bitmap,paint,Graphics,Image Processing,Mobile,Bitmap,Paint,我正在为移动设备编写一个类似photoshop的程序,我想支持层的使用。一次最多可以在内存中存储7个位图。我想看看我是否能想出一种在不占用太多内存的情况下支持很多层(例如10层或20层)的方法 我目前的想法是: 使用一个位图作为用户当前可以绘制和操作的活动层 使用一个位图存储活动层下所有层的展开版本 使用一个位图存储活动层上方所有层的展开版本 当某个层不是活动层时,我可以将其写入磁盘并将其从内存中删除。当用户切换活动层时,我从磁盘检索该层并重新创建展平的图像 如果每个层都只有不透明度设置,这

我正在为移动设备编写一个类似photoshop的程序,我想支持层的使用。一次最多可以在内存中存储7个位图。我想看看我是否能想出一种在不占用太多内存的情况下支持很多层(例如10层或20层)的方法

我目前的想法是:

  • 使用一个位图作为用户当前可以绘制和操作的活动层
  • 使用一个位图存储活动层下所有层的展开版本
  • 使用一个位图存储活动层上方所有层的展开版本
当某个层不是活动层时,我可以将其写入磁盘并将其从内存中删除。当用户切换活动层时,我从磁盘检索该层并重新创建展平的图像

如果每个层都只有不透明度设置,这个想法似乎是正确的,但我认为如果层可以有不同的混合模式,如屏幕和倍增,它将不起作用。平坦的底层可以很好地工作,但是如果其中一层使用混合模式,并且活动层发生了更改,那么我似乎需要重新渲染所有顶层


我可以使用什么方法?我见过各种各样的画图程序支持100层或更多层,所以一定有一些技巧。

好吧,我想你已经找到了一个合理的方法来处理层只是简单不透明度的情况,但是如果它们有不同的混合模式,我可以看到问题

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


我似乎记得Photoshop至少曾经这样做过——它们可能有一个层次结构,但图像是分块的。

好吧,我想你已经找到了一个合理的方法来处理层只有简单的不透明度的情况,但是如果它们有不同的混合模式,我可以看到问题

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


我似乎记得PS图象处理软件至少曾经是这样做的——他们可能有一个层次结构,但是图像是分裂的。

谢谢,这是一个很有趣的想法。谢谢,这是一个很有趣的想法!