如何从matlab中用户定义的函数返回一个值,该函数的回调在uicontrol中指定
Posted
技术标签:
【中文标题】如何从matlab中用户定义的函数返回一个值,该函数的回调在uicontrol中指定【英文标题】:how to return a value from a user defined function in matlab whose callback is specified in uicontrol 【发布时间】:2015-05-16 08:13:58 【问题描述】:我要运行以下代码来调整图形窗口上的图像大小。为此,我在脚本文件中编写了这段代码:
%%%f=figure('name','resize','color','w','windowstyle','modal','numbertitle','off','position',[820 110 500 612],'resize','on')
% Removed "'windowstyle','modal'" to allow debug
f=figure('name','resize','color','w','numbertitle','off', ...
'position',[820 110 500 612],'resize','on')
hx=axes('Units','inches');
hax = imread('c.jpg');
imshow('c.jpg')
sli=uicontrol('Style','slider',...
'Min',1,'Max',4,'Value',2,...
'Position',[50 525 400 20],...
'Callback', @resiz,hax)
y=getappdata(0,'x');
uicontrol('Style','text',...
'Position',[50 555 400 20],...
'String','Resize');
uicontrol('Style','pushbutton',...
'Position',[30 565 100 40],...
'String','Save','Callback',@save,y);
uicontrol('Style','pushbutton',...
'Position',[200 565 100 40],...
'String','Cancel','Callback',@cancel);
除了上面的代码,我还有一个 resiz() 的函数定义代码,其中嵌套了 save() 和 cancel(),如下所示:
function x=resiz(hObj,event,ax) %#ok<INUSL>
val =get(hObj,'Value');
if val==1
v=256;
else
v=(val-1)*2*256;
end
s=[v v];
ax=imresize(ax,s);
imshow(ax)
setappdata(0,'x',ax);
function save(hObj,event,im)
imwrite(im,'gt.jpg','jpg');
return
function cancel(hObj,event)
close(hObj);
return
%%%return;
我已经通过 setappdata 和 getappdata 但找不到任何解决方案。谁能帮我解决这个问题。
【问题讨论】:
【参考方案1】:我认为您正在寻找的是 guidata。查看带有“在程序化 UI 中使用 guidata”示例的部分
来源:http://ch.mathworks.com/help/matlab/ref/guidata.html?searchHighlight=guidata#zmw57dd0e268555
【讨论】:
以上是关于如何从matlab中用户定义的函数返回一个值,该函数的回调在uicontrol中指定的主要内容,如果未能解决你的问题,请参考以下文章