我在图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);
答案 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, ...)
语法,以显示不在“当前轴”中的图像。