あなたはペイントのような描画プログラムを作っています。ブラシストロークの元に戻す/やり直すことができます。これをどのように実装しますか?ラスタ描画プログラムでUndoをどのように実装しますか?
速度とメモリを最適化します。
あなたはペイントのような描画プログラムを作っています。ブラシストロークの元に戻す/やり直すことができます。これをどのように実装しますか?ラスタ描画プログラムでUndoをどのように実装しますか?
速度とメモリを最適化します。
キャンバスのバックアップコピーを作成します。ブラシストロークを完全に囲む長方形のパッチを選択します。そのパッチに含まれているビットマップを新しいバージョンとバックアップの両方に保存します。これらの変更をblitして、ストロークを元に戻したりやり直すことができます。
多量のメモリを使用することがあります。
ロングストロークを一連の短いストロークに分割すると、必要なメモリを減らすための道が大きく切り開かれます。 'U'字型を描き、U字型のパスに続くボックスと、 'U'字型の全体をカバーする1つの境界ボックスを使用することを考えてみましょう – MadCoder
変更されたキャンバスの以前の状態を記録するには、quadtreeを使用します。 元に戻すには、クアッドツリーからキャンバス状態を置き換えます。
これは宿題のためのものですか? – SingleNegationElimination
いいえ、ちょうどアイデアのための群衆調達。私は私の答えを置いた。他のアイデア? –