7

現在、MATLAB で基本的な画像処理アプリケーションを開発しています。前の状態に戻す機能を実装する必要があります。ネットでuiundoを検索しましたが、GUI アクションのみを元に戻します。元に戻す簡単なコマンドはありますか。ありがとう。

4

3 に答える 3

6

メモリに余裕がある場合は、すべてのプログラム状態を構造体に格納し、この構造体を循環バッファーにプッシュできます。バッファ内の要素の数によって、元に戻すレベルの数が決まります。

于 2012-04-13T13:20:41.877 に答える
6

Command パターンを使用して、独自の複数レベル (または 1 レベル) の取り消しを実装する必要があるように思えます。

これには、アクションを実行して状態を復元するためのロジックを含むオブジェクトに操作をラップする必要があります。特効薬はありません。ハードワークが必要です。

于 2012-04-13T11:47:18.007 に答える
2

一般的な元に戻す操作は複雑ですが、MATLAB 変数の状態を保存して保存された状態に戻すことのみに関心がある場合は、これが 1 つの解決策になる可能性があります。

save_state.m:

SavedStateFolder = '/home/user/matlab_saved_states_folder/';
save([ SavedStateFolder, 'saved_state_', sprintf('%06d', (size(dir(SavedStateFolder), 1) - 1)) ]); 
fprintf('state saved in saved_state_%s.mat\n', sprintf('%06d', (size(dir(SavedStateFolder), 1) - 2)));

undo_index.m:

function undo_index()
SavedStateFolder = '/home/user/matlab_saved_states_folder/';
FilesStruct = dir(SavedStateFolder);
LastSavedStateIndex = size(FilesStruct, 1) - 2;
if (LastSavedStateIndex < 1)
    fprintf('No saved states available.\n');
else    
    fprintf('Index of last saved state is %06d\n', LastSavedStateIndex);
end
return

undo.m:

SavedStateFolder = '/home/user/matlab_saved_states_folder/';
load([ SavedStateFolder, 'saved_state_', sprintf('%06d', input('Enter saved state index ')) ]); 

次に、 を使用save_stateして MATLAB 変数の状態を保存したりsave_state;、すべての変更を追跡したい場合は、すべてのコマンドにプレフィックスを付けたりすることもできます。変数の以前の状態に戻りたい場合は、実行undo_indexして最後に保存された状態のインデックスを見つけてから、 でundo指定されたインデックスを実行して入力するundo_indexか、変数の以前の状態に戻すために任意のより小さな正の整数を入力できます。 . 最初に保存された状態ファイルの名前saved_state_000001.matは. また、呼び出された変数の以前の内容は、実行または実行すると失われることに注意してください。saved_state_000002.matsave_stateSavedStateFoldersave_stateundo. これを回避するには、SavedStateFolderinsave.state.mおよびin のすべてのインスタンスundo.mをハードコードされたフォルダー名に置き換えることができます。次に例を示します。

save_state.m:

save([ '/home/user/matlab_saved_states_folder/', 'saved_state_', sprintf('%06d', (size(dir('/home/user/matlab_saved_states_folder/'), 1) - 1)) ]); 
fprintf('state saved in saved_state_%s.mat\n', sprintf('%06d', (size(dir('/home/user/matlab_saved_states_folder/'), 1) - 2)));

undo.m:

load([ '/home/user/matlab_saved_states_folder/', 'saved_state_', sprintf('%06d', input('Enter saved state index ')) ]);

またsave_state、および には、およびファイル以外のファイルはないundo_indexundo仮定します。また、保存するファイルの数と実行中のインデックスはこの方法でわかります。それらを置き換えるために同じ数の空のファイルを作成すると、カウントが一致せず、既存の保存された状態ファイルの上に状態が保存される可能性があります。SavedStateFolder...saved_state_*.matsaved_state_*.matsaved_state_*.matsave_state

于 2012-04-13T15:19:24.163 に答える