Reputation: 51
Im kinda discovering GUI developement in Matlab and Im experimenting difficulties with some basic concepts. If anyone could help me I would be really greatful.
Im trying to build a GUI using matlab 'guide', and all I am ding is loading an image into an axes and I want to save it into some global variable that will be shared by all the callbacks in my GUI, this way i could process this image on other event handlers.
Im having trouble finding a way to do it, I tried to declare some variables as 'global' but it didn't worked. Can you please explain me how it works, or show a brief example. Thanks
Upvotes: 3
Views: 4583
Reputation: 7257
Here is a working example (using GUIDE) that does what you're looking for in two different ways. Over all I prefer using the 'handles' method for 90% of my GUIs. The only time I will ever use a global is if I need to access the data outside of the GUI.
Please note that I have added the 'handles.img = 0' inside the opening function. As a disclaimer, there is no data validation from the browse. I have also only tested this with a .gif file and put no thought into the best way to display the image to the axes. Just quick and dirty :)
EDIT: When you copy and paste this data into an M-File. Be sure to name it picture_loader.m. Matlab has done some stupid things to me with the wrong file names :)
Hope this helps.
function varargout = picture_loader(varargin)
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @picture_loader_OpeningFcn, ...
'gui_OutputFcn', @picture_loader_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
% --- Executes just before picture_loader is made visible.
function picture_loader_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
handles.img = 0; % Add the img data to the handle
guidata(hObject, handles);
% --- Outputs from this function are returned to the command line.
function varargout = picture_loader_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;
% --- Executes on button press in Browse.
function Browse_Callback(hObject, eventdata, handles)
global img % Store the data global
img_path = uigetfile('*.gif'); % browse for a file
img = importdata(img_path); % Load the image data
handles.img = img; % Store the img data in the handles struct
guidata(hObject, handles); % Save handles so all call backs have the updated data
% Plot the data in the axes1
axes(handles.axes1) % Select axes1 to write to
image(img.cdata) % Display the image
colormap(img.colormap) % Apply proper colormap
% --- Executes on button press in load_global.
function load_global_Callback(hObject, eventdata, handles)
global img
if isstruct(img)
axes(handles.axes1) %Select the axes1 on the gui
image(img.cdata)
colormap(img.colormap)
end
% --- Executes on button press in load_global_handle.
function load_handle_Callback(hObject, eventdata, handles)
if isstruct(handles.img)
axes(handles.axes1) %Select the axes1 on the gui
image(handles.img.cdata)
colormap(handles.img.colormap)
end
% --- Executes on button press in clear.
function clear_Callback(hObject, eventdata, handles)
cla(handles.axes1)
Upvotes: 3