私はそのように絵を描くアプリの魔女の作品を持っています:
- mouseDown/mouseDragged イベントで、CIRadialGradient を使用してイベントの場所にポイントを描画します
- CIRadialGradient outputImage を取り、それを CISourceOverCompositing フィルターで inputImage として使用します (開始時の inputBackground は空の CIImage です)。
- CISourceOverCompositing outputImage を brushAccumulator イメージとして設定します (後で、brushAccumulator イメージは CISourceOverCompositing フィルタの inputBackgroundImage として使用されます)。
- brushAccumulator 画像を CIBlendWithMask inputMaskImage として設定する CIBlendWithMask outputImage を mainImageAccumulator 画像として設定する mainImageAccumulator を画面に描画する
そして、undo メソッドを実装したいと思います。まず、brushAccumulator.image (CIImage) を元に戻すオブジェクトとして使用できると考えました (それを mutableArray に追加し、元に戻すメソッドが呼び出されたときに、brushAccumulator イメージを mutableArray オブジェクトの 1 つに設定します)。 、それは単にそれを構築するための一連の指示の結果であり、たとえば CIFilter の出力です。したがって、CIImage をコピーする場合は、それらの命令をコピーするだけで、変更すると出力が変更されます。
そこで、brushAccumulator のイメージから NSBitmapImageRep を作成し、それを NSMutableArray に格納できると考えました。しかし、brushAccumulator の更新で問題が発生しました。NSMutableArray の NSBitmapImageRep の 1 つから作成された新しい CIImage を brushAccumulator イメージとして設定しましたが、brushAccumulator イメージは変更されません。
私のペイント アプリは CIImageAccumulator (CIMicroPaint サンプル コードと同様) に基づいていますが、元に戻す/やり直し効果を実現するために何を提供できますか?