如何从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中指定的主要内容,如果未能解决你的问题,请参考以下文章

如何优雅地忽略 MATLAB 函数的某些返回值

如何从用户定义的函数返回 3D 数组?

matlab如何定义数组函数,

使用 SQL 查询从 BigQuery 用户定义函数返回值

matlab怎么在主函数中调用子函数计算出来的值

Java中如何调用函数和自定义函数