2014-01-22 29 views
1

我在圖1上有一些滑塊,我在圖2上有一些圖像。我想爲滑塊做回調,當我更改圖1中的滑塊時,閾值改變並且圖像自動更新圖2圖2中的滑塊如何在Matlab中進行更改?

我使用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); 

回答

1

創建引用到這兩個數字:

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

然後當做回調傳遞f2作爲參數。

+0

謝謝你試圖回答。 – M4G

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 

後者可能是在性能稍差,但例如即使圖2被刪除並重新創建,也具有可靠工作的好處。

爲了避免焦點的變化,你必須擺脫這一行的回調:

figure(F.f) 

這明確地將焦點移動到第二個數字。 您必須使用例如語法爲imshow(axes_handle, ...),以便不在「當前軸」中顯示圖像。

+0

我試過這個,問題在於當你觸摸圖1中的滑塊時,活動圖形通過這個函數變爲圖2,並且你不能再移動滑塊。 – M4G

+0

所以在回調函數結束時(或者圖2的規則),只需再聲明一次'figure(1)',所以它會變成活動的回 – Adiel

+0

就這樣,圖1保持消失並且一次又一次地出現通過每個滑塊移動。 – M4G