我有这样的绘画应用程序女巫作品:
- 在 mouseDown/mouseDragged 事件中,我使用 CIRadialGradient 在事件位置绘制一个点
- 取 CIRadialGradient outputImage 并在 CISourceOverCompositing 过滤器中使用它作为 inputImage(开始时的 inputBackground 为空 CIImage)
- 将CISourceOverCompositing outputImage设置为brushAccumulator图像(后面将brushAccumulator图像作为CISourceOverCompositing filter中的inputBackgroundImage)
- 设置brushAccumulator 图像为CIBlendWithMask inputMaskImage 设置CIBlendWithMask outputImage 为mainImageAccumulator 图像绘制mainImageAccumulator 到屏幕
我想实现撤消方法。首先,我认为我可以使用brushAccumulator.image(CIImage)作为撤消对象(将其添加到mutableArray,然后在调用撤消方法时将brushAccumulator图像设置为mutableArray对象之一)但我发现:CIImage不是包含像素的图像,它只是构建它的一系列指令的结果,例如 CIFilter 的输出。因此,如果您复制 CIImage,您只需复制那些指令,修改后会修改输出。
所以我想我可以从brushAccumulator的图像中制作NSBitmapImageRep并将其存储到NSMutableArray。但是我在更新brushAccumulator 时遇到了问题。我将新的 CIImage 设置为由 NSMutableArray 中的 NSBitmapImageRep 之一制成的新 CIImage 作为brushAccumulator 图像,但brushAccumulator 图像不会改变。
当我的绘画应用程序基于 CIImageAccumulator(类似于 CIMicroPaint 示例代码)时,您能为我提供什么来实现撤消/重做效果?