簡體   English   中英

Matlab在gui中顯示圖像

[英]Matlab show image in gui

我一直在嘗試瀏覽后顯示圖像。 但是,我一直得到類似以下錯誤:

??? 引用不存在的字段“ axes1”。 錯誤==> ImGui> 19根軸上的瀏覽回調(handles.axes1)??? 評估uicontrol回調時出錯

我曾嘗試使用兩個預定義的軸[例如'axes(handles.axes1);']和后期定義的[例如'imshow(imgorg,'Parent',handles.axes1);']。 不幸的是,這兩種技術對我來說都沒有奏效,而且我始終堅持使用軸。 我也嘗試制作一個自定義軸並使用它,但是它也未能在圖中顯示我的圖像。 任何人都可以在我的代碼中識別/糾正該問題:

function ImGui
    f =figure('Visible','on','Position',[460,200,700,385]);
    BrowseBt = uicontrol('Style','pushbutton',...
                 'String','Browse','Position',[600,350,70,25],...
                 'Callback',@Browse_Callback);
    dispnames  = uicontrol('Style','text','String','',...
           'Position',[50,350,400,20]);
    movegui(f,'center');

    function Browse_Callback(hObject, eventdata, handles) 

        handles.output = hObject;
       [FileName,PathName] = uigetfile('*.jpg;*.png','Select an image file',...
                                    'C:\Users\owner\Downloads\Conjunctiva\SGRH');

       fpname = strcat(PathName,FileName);
       dispnames  = uicontrol('Style','text','String',fpname,...
           'Position',[50,350,400,20]);
       imgorg = imread(fpname);

       handles.output = hObject;
       guidata(hObject, handles);
       axes(handles.axes1);
       imshow(imgorg);
%        ImAxes = axes('Parent', f, ...
%                  'Units', 'normalized', ...
%                  'position',[50 50 400 250]);
%              'HandleVisibility','callback', ...
%        imshow(imgorg, 'Parent', handles.axes1);
%        imshow(imgorg, 'Parent', handles.ImAxes);
    end
end

使用guidata函數。
並重新整理一下代碼

您定義所有的uicontrols(按鈕,文本框,軸等),然后將它們的句柄分配給結構(在此稱為handles )。 然后,在完全定義GUI時,調用guidata將此句柄結構存儲在任何回調都可以訪問它的地方。

然后,在回調函數中,再次調用guidata來檢索此句柄結構並訪問對象(軸和文本框)。

function ImGui
    f =figure('Visible','on','Position',[460,200,700,385]);
    handles.BrowseBt = uicontrol('Style','pushbutton',...
                 'String','Browse','Position',[600,350,70,25],...
                 'Callback',@Browse_Callback);
    handles.dispnames  = uicontrol('Style','text','String','',...
           'Position',[50,350,400,20]);
    handles.ImAxes = axes('Parent', f, ...
             'Units', 'pixels', ...
             'position',[30 30 640 300],...
             'visible','off');
    movegui(f,'center');
    guidata(f,handles) ;

    function Browse_Callback(hObject, eventdata) 
       handles = guidata(hObject);

       [FileName,PathName] = uigetfile('*.jpg;*.png','Select an image file');
       fpname = strcat(PathName,FileName);

       imgorg = imread(fpname);

       set(handles.dispnames,'String',FileName)
       set(handles.ImAxes,'visible','on') ;
       imshow(imgorg, 'Parent', handles.ImAxes);
       guidata(hObject, handles);
    end
end

在這種特定情況下,您實際上並不需要在回調結束時再次調用guidata再次存儲值,但這是一個很好的做法,以防萬一您修改了一些想要保存的更改。

暫無
暫無

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

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