Step-back button in GUI

조회 수: 8 (최근 30일)
Michal Bella
Michal Bella 2018년 5월 21일
답변: Michal Bella 2018년 5월 24일
Hello. I have a GUI with an image processing functions. My question is, is it possible to do Back button in this gui? I store and update all events in handles. e.g. handles.inputImage = handles.inputImage_gray, handles.inputImage = handles.inputImage_poisson_noise, handles.inputImage = handles.inputImage_gaussian_filter ... The result is grayscale image with Poisson noise which is filtered by Gaussian Filter... And what if i want to do step back button and remove last event (in this case handles.inputImage = handles.inputImage_gaussian_filter ) and then next and then next last event. Is it possible to store handles in listbox and find last value and then assing to this value inverted state? handles.inputImage_poisson_noise = handles.inputImage. I hope u can understand what i want to do. Thank you very much.

채택된 답변

Jan
Jan 2018년 5월 21일
편집: Jan 2018년 5월 21일
After the colors have been converted to gray, there is no way to get the colors back. But of course you can store the initial value (image) in a list to which you append the new image after each operation. Then an undo is easy to implement.
% After loading the image
handles.imageList = {imageRGB};
handles.operation = {'original'};
...
% At applying any operation:
image = rgb2gray(image);
handles.imageList{end+1} = image;
handles.operation{end+1} = {'RGB to gray'};
Now an "undo" is:
if numel(handles.imageList) > 1
image = handles.imageList{end-1};
end
and updating the display, maybe removing the last element from the lists, except you want t "redo".
  댓글 수: 4
Jan
Jan 2018년 5월 21일
If you want to undo multiple steps, handles.imageList{end-1} is not sufficient. Add a cursor for the current state:
% For adding a new step:
handles.imageCursor = handles.imageCursor + 1;
handles.imageList{handles.imageCursor} = newImage
handles.operation{handles.imageCursor} = operation
And the undo:
handles.imageCursor = handles.imageCursor - 1;
image = handles.imageList{handles.imageCursor}
Walter Roberson
Walter Roberson 2018년 5월 21일
Using // for comments is not valid MATLAB code. The Octave forum is elsewhere.

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Michal Bella
Michal Bella 2018년 5월 24일
Thank u, but i did it like this and its working perfectly
if numel(handles.imageList) > 1
handles.imageList(end)=[];
handles.RGB = handles.imageList{end};
handles.imageList
imshow( handles.RGB);
guidata(hObject, handles);
end
Big thank for you :)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by