我一直试图在浏览后显示图像。但是,我遇到了错误:
???参考不存在的字段'轴1'。 ==>中的错误ImGui> Browse_Callback at 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
答案 0 :(得分:1)
使用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
来再次存储值,但这是一种很好的做法,以防您修改了要保存更改的内容