7

この質問は、おそらく描画システム全般に当てはまります。元に戻す機能が PS でどのように実装されているのか疑問に思っていました。プログラムは、各操作の前にキャンバスのスナップショットを作成しますか? もしそうなら、これは巨大なメモリ要件につながりませんか? Command パターンを調べましたが、これが描画にどのように適用されるかはよくわかりません。

よろしく、メノ

4

5 に答える 5

12

コマンドパターンと呼びます。あらゆる種類のエディターに役立つように実装するのは簡単です。

Photoshop は、元の画像に積み重ねられた変換を適用します。ワンオペレーションワンコマンド。元に戻すと、変換が適用されなくなります。したがって、元のバージョンと最新のバージョンを保持するだけですが、パフォーマンスのために最新のいくつかのバージョンをキャッシュする可能性があると思います.

于 2009-04-04T13:04:11.120 に答える
4

一部の操作は元に戻すことができず、毎回イメージ全体のスナップショットを作成することは問題外であると言うので、私が見ることができる他の唯一の代替手段はデルタのスタックです. デルタは、操作前に変更されたピクセルを含む一連のマスクです。もちろん、多くの操作は元に戻すことができるため、デルタを最適化できます。

于 2009-04-04T13:04:29.183 に答える
4

Adobe Photoshop で がどのように実装されているかはわかりませんが、 Apple Shake合成アプリケーションundo内の Paint ノードについて説明するのは非常に簡単です。

  • 各ストロークは、ストロークの色、ブラシのサイズなどの情報とともに、一連のポイントとして保存されます。
  • ストロークを描画すると、現在の画像に変更が加えられます。
  • ストロークごとxに (10 だと思います)、現在の画像がメモリにキャッシュされます。
  • 元に戻すと、前にキャッシュされた画像の最後の ~9 ストロークが再描画されます。

これには 2 つの問題があります。

  • 10 回以上元に戻すと、画像全体を再計算する必要があります。数千回のストロークでは、これにより数秒の一時停止が発生する可能性があります。
  • Shake では、実際のピクセル値ではなく、ストローク情報を含むセットアップ ファイルを保存します。つまり、ペイント ノードを再度開いたり、イメージをレンダリングしたりするたびに、イメージ全体を再計算する必要があります (ただし、元に戻すほど大きな問題ではありません)。

さて、第 3 の問題があります。Shake はひどくバグが多く、多くの領域で実装が不十分であり、Paint ノードはその 1 つです。したがって、これがどれほど優れた実装であるかはわかりませんが、Photoshop がそうであるとは想像できません。あまりにも似ていません (はるかに最適化されていますが)。

于 2009-04-04T15:57:45.867 に答える
-2

Photoshopは、履歴を使用してアクションを追跡します。これらは、いつでも履歴に戻ることができるため、元に戻す機能としても機能します。設定で履歴のサイズを設定できます。

また、 Adobe Version Cueを、元に戻すまたはバージョンを振り返るためのツールとして検討することをお勧めします。これは、その唯一の目的のためにスイートに組み込まれています。http://en.wikipedia.org/wiki/Adobe_Version_Cue

于 2009-04-04T13:20:52.263 に答える