簡體   English   中英

如何將句柄從一個函數傳遞到另一個函數

[英]How to pass handles from one function to another

當我運行我的代碼時,會有兩個數字,一個名為“圖 1”,另一個名為“測試”。 我想要做的是讓 imshow 在“測試”而不是“圖 1”中顯示。

himg=GUI('name','test','NumberTitle','off'); %where GUI was designed using GUIDE
handles = guihandles(himg);
 while ishandle(himg)
    if sum(depthMetaData.IsSkeletonTracked)>0
      util_skeletonViewer(skeletonJoints,image,1,handles); %refer code below
    else
      imshow(image,'Parent',handles.axes1);
    end
 end

function [] = util_skeletonViewer(skeleton, image, nSkeleton,handles)
imshow(image,'Parent',handles.axes1);

退出循環后我會得到這個錯誤

錯誤使用 imshow>validateParent(第 352 行) HAX 必須是有效的軸句柄。 imshow 中的錯誤(第 257 行) validateParent(specific_args.Parent) Main 中的錯誤(第 297 行) imshow(image,'Parent',handles.axes1);

*ps:我實際上不知道為什么“圖 1”會存在。

在檢查您的問題時,我不確定“guihandles”是否覆蓋了軸手柄; 在重新創建您的問題的示例中,它沒有。 此外,保存手柄時軸是否存在?

請嘗試以下修改后的代碼是否有效。

himg=GUI('name','test','NumberTitle','off'); %where GUI was designed using GUIDE
handles = guihandles(himg);
handles.axis1 = [];
while ishandle(himg)
    if sum(depthMetaData.IsSkeletonTracked)>0
        util_skeletonViewer(skeletonJoints,image,1,handles); %refer code below
    else
        if ~isempty(handles.axes1)
            imshow(image,'Parent',handles.axes1);
        else
            figure(himg)
            imshow(image,'Parent',gca);
            handles.axes1 = gca;
        end
    end
end

function [] = util_skeletonViewer(skeleton, image, nSkeleton,handles)
    if ~isempty(handles.axes1)
        imshow(image,'Parent',handles.axes1);
    else
        figure(himg)
        imshow(image,'Parent',gca);
        handles.axes1 = gca;
    end

我也遇到了這個問題,所以我將描述我想出的快速解決方案。 在您知道 handles 正在按照您期望的方式執行的函數中(在我的情況下是OpeningFcn ),我會將句柄保存為應用程序數據:

setappdata(0,'handles',handles);

然后在句柄不代表任何軸的函數中,我會調用:

handles = getappdata(0,'handles');

這樣做然后允許我訪問我定義的軸,例如handles.axes1

我在嘗試在參數更改后實現生成的圖像時遇到了同樣的問題。 在我的例子中,我使用了多個圖形,我想在按下按鈕后在最后一個圖形的軸上顯示結果:

ok_mask_button= uicontrol(handles.pan,'Style','pushbutton','Units', 'normal', 
'Position',[.55 .9 .08 .06],'FontSize',12,'FontWeight','bold', 
'String','Ok','Callback', @Mask_parameters);

所以要使用我的回調函數顯示圖像,解決方案是:

   % some code above%
    ...
    ax = gca;
    imshow(handles.mask,'Parent',ax)

我需要使用 gca 來指定我想在當前軸上工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM