Matlab如何使用图2中的滑块对图1进行更改?

时间:2014-01-22 09:46:55

标签: matlab callback matlab-guide figure

我在图1中有一些滑块,我在图2中有一些图像。我想以一种方式对滑块执行回调,当我更改中的滑块时图1 ,阈值发生变化,图像在图2 中自动更新。

我正在使用addlistener来发送回调函数的值。问题是当您移动滑块时,活动图形为图1 ,并且您想要对图2进行更改。

添加一些代码以澄清:

M.rgbImage = imread('euhedral-mag-on-po-edge-pseudo-sub-ophitic-rl-fov-4-8mm.jpg');
[rows, columns, numberOfColorBands] = size(M.rgbImage);
F.f = figure;   % This is the figure which has the axes to be controlled.

% Now create the other GUI
S.fh = figure('units','pixels',...
              'position',[400 400 500 100],...
              'menubar','none',...
              'name','Image control',...
              'numbertitle','off',...
              'resize','off');

S.sl = uicontrol('style','slide',...
    'unit','pix',...
    'position',[60 10 270 20],...
    'min',0,'max',255,'val',100,...
    'callback',{@sl_call2,S},'deletefcn',{@delete,F.f});

...

lis = addlistener(S.sl,'Value','PostSet',@(e,h) sl_call3(S,F,M)); 


function sl_call3(S,F,M)
v = get(S.sl,'value');
figure(F.f), subplot(4, 4, 13);
M.redMask = (M.redPlane > v);
imshow(M.redObjectsMask, []);
set(S.ed(2),'string',v);

2 个答案:

答案 0 :(得分:1)

创建对您的数字的引用:

f1=figure(1);
f2=figure(2);

然后在进行回调时将f2作为参数传递。

答案 1 :(得分:1)

在回调中,你将获得第二个数字的句柄。 有多种方法可以做到这一点。

您可以在回调定义时指定第二个数字的句柄:

figure2 = ...;
addlistener(hSlider, ..., @(a,b) changeStuffOn(figure2));

或者在回调期间:

function callbackFunction(hObject, evt)
    % get the handle to the second figure, e.g. by a tag, or its name
    fig2 = findobj(0, 'type', 'figure', 'tag', 'figure2'); % 

    % do whatever you want with fig2
end

后者的表现可能稍差,但例如即使已删除并重新创建了figure2,也有可靠的工作效果。

为了避免改变焦点,你必须摆脱这一行你的回调:

figure(F.f)

这明确地将焦点移到第二个数字。 你必须使用例如imshow(axes_handle, ...)语法,以显示不在“当前轴”中的图像。