1. 在GUI子程序的OpeningFcn函数的结尾加上uiwait(handles.figure1); figure1是subGUI的Tag;
2. subGUI中控制程序结束(如"OK"和"Cancel"按钮)的callback末尾加上uiresume(handles.figure1),不要将delete命令放在这些callback中;
3. 在子GUI的OutputFcn中设置要传递出去的参数,如 varargout{1} = handles.out1;varargout{2} = handles.out2;末尾添加delete(handles.figure1); 结束程序。
在GUI的OpenFcn中,如果不加uiwait,程序会直接运行到下面,执行OutputFcn。也就是说程序一运行,返回值就确定了,再在其它部分对handles.output作更改也没有效果了。
加上uiwait后,只有执行了uiresume后,才会继续执行到OutputFcn,在此之前用户有充分的时间设置返回值。
通过以上设置以后,就可以通过 [out1, out2] = subGUI(in1, in2) 的形式调用该子程序。
在一个GUI中调用另一个GUI时,主GUI不需要特别的设置,同调用普通的函数一样。在打开子GUI界面的同时,主程序还可以响应其它的控件。不需要担心子GUI的返回值被传错了地方。
44、Matlab保存axes上的图的问题(包括坐标轴)
做了一个按钮"保存",可以另存为画在axes上的图,保存为jpg格式,参考了论坛里的帖子,写了代码,可是保存的图片是空的,什么都没有,请问是哪里的问题?保存的图片如何才能包括axes的坐标轴?
代码:
function m_file_save1_Callback(hObject, eventdata, handles)
% hObject handle to m_file_save1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
axes(handles.axes1); %取得axes1的句柄
if isempty(handles.axes1)
return;
end
newFig = figure;%由于直接保存axes1上的图像有困难,所以保存在新建的figure中的谱图
set(newFig,'Visible','off')%设置新建的figure为不可见
newAxes = copyobj(handles.axes1,newFig); %将axes1中的图复制到新建的figure中
set(newAxes,'Units','default','Position','default'); % 设置图显示的位置
[filename,pathname] = uiputfile({ '*.jpg','figure type(*.jpg)'}, '保存原始波形');
if isequal(filename,0)||isequal(pathname,0)%如果用户选择"取消",则退出
return;
else
fpath=fullfile(pathname,filename);
end
imwrite(newFig,fpath);%保存图片
问题解决:
你提出的问题很有特点,但是代码中imwrite写出的是figure德handle,按理说是应该没有图像的;
你可以采用:
f = getframe(gcf);
f = frame2im(f);
imwrite(f, fpath);
代码:
axes(handles.axes1); %取得axes1的句柄
if isempty(handles.axes1)
return;
end
newFig = figure;%由于直接保存axes1上的图像有困难,所以保存在新建的figure中的谱图
set(newFig,'Visible','off')%设置新建的figure为不可见
newAxes = copyobj(handles.axes1,newFig); %将axes1中的图复制到新建的figure中