Select file issue in Matlab GUI

In a GUI, I have a function that open a selected image file. I am trying to improve it that if an image is already shown in the axes it will give a question dialog box but it does not work. What is the problem? is there a better and nicer way to do it?
function loadImageButton_Callback(hObject, eventdata, handles)
% hObject handle to loadImageButton (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
set(handles.imageAxes, 'Visible','off')
if exists(isappdata(0, 'IData'))
choice = questdlg('An image is already in process, open a new one?', ...
'Load image', ...
'Yes','No','No');
% Handle response
switch choice
case 'Yes'
cla reset;
[file, folder] = uigetfile({'*.jpg;*.gif;*.png;*.tif;*.bmp','All Image Files'},' Select image');
if file == 0;
return;
end
fullFileName = fullfile(folder, file);
I = imread(fullFileName);
setappdata(0,'IData',file);
case 'No'
return;
end
else
[file, folder] = uigetfile({'*.jpg;*.gif;*.png;*.tif;*.bmp','All Image Files'},' Select image');
if file == 0;
return;
end
fullFileName = fullfile(folder, file);
I = imread(fullFileName);
setappdata(0,'IData',file);
end
axes(handles.imageAxes);
imshow(I);
setappdata(handles.imageAxes, 'yourVariable', I);

Risposte (1)

Adam
Adam il 8 Feb 2017
Declare
handles.hImage = [];
guidata( hObject, handles )
in your OpeningFcn
Then when you plot:
handles.hImage = imshow(...)
guidata( hObject, handles )
and to test if the image exists:
if ~isempty( handles.hImage ) && isgraphics( handles.hImage )
...
end

3 Commenti

I added the Declarations in the OpeningFcn:
handles.hImage = [];
guidata( hObject, handles )
And changed the function loadImageButton_Callback to:
function loadImageButton_Callback(hObject, eventdata, handles)
% hObject handle to loadImageButton (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
set(handles.imageAxes, 'Visible','off')
if ~isempty( handles.hImage ) && isgraphics( handles.hImage )
choice = questdlg('An image is already in process, would you like top open a new one?', ...
'Load image', ...
'Yes','No','No');
% Handle response
switch choice
case 'Yes'
cla reset;
[file, folder] = uigetfile({'*.jpg;*.gif;*.png;*.tif;*.bmp','All Image Files'},' Select image');
if file == 0;
return;
end
fullFileName = fullfile(folder, file);
I = imread(fullFileName);
setappdata(0,'IData',file);
case 'No'
return;
end
else
[file, folder] = uigetfile({'*.jpg;*.gif;*.png;*.tif;*.bmp','All Image Files'},' Select image');
if file == 0;
return;
end
fullFileName = fullfile(folder, file);
I = imread(fullFileName);
setappdata(0,'IData',file);
end
axes(handles.imageAxes);
handles.hImage =imshow(I);
guidata( hObject, handles )
setappdata(handles.imageAxes, 'yourVariable', I);
But it did not work, what is the error? Why did you advised to add:
handles.hImage = imshow(...)
guidata( hObject, handles )
and to change the if to:
if ~isempty( handles.hImage ) && isgraphics( handles.hImage )
Adam
Adam il 8 Feb 2017
Modificato: Adam il 8 Feb 2017
"what is the error?"
I don't know, you didn't tell us what aspect of it didn't work.
The code I added saves the image handle when you plot it and then tests if that handle exists and is a valid graphics object.
You are right, the error is that when I re-click the button after selecting an image it does not give me the question dialog.

Accedi per commentare.

Categorie

Scopri di più su Creating, Deleting, and Querying Graphics Objects in Centro assistenza e File Exchange

Prodotti

Richiesto:

il 8 Feb 2017

Commentato:

il 8 Feb 2017

Community Treasure Hunt

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

Start Hunting!

Translated by