我在Matlab中制作一个GUI,滚动显示〜600个医学图像。我有一个显示图像的轴,以及一个滚动条,当按下结束箭头时,它一次一个地通过图像。
我试图弄清楚如何合并WindowScrollWheelFcn,这样我就可以使用鼠标上的滚动来更快地浏览图像。
这是我的代码:
function ct_slider_Callback(hObject, eventdata, handles)
set(gcf, 'WindowScrollWheelFcn', @wheel);
set(gcf, 'CurrentAxes', handles.ct_image_axes);
handles.currentSlice = round(get(handles.ct_slider, 'Value'));
imshow(handles.imageArray(:,:,handles.currentSlice));
text = sprintf('Slice number: %d', handles.currentSlice);
set(handles.ct_slice_number, 'String', text);
guidata(hObject, handles);
function wheel(hObject, callbackdata, handles)
if callbackdata.VerticalScrollCount > 0
handles.currentSlice = handles.currentSlice + 1;
elseif callbackdata.VerticalScrollCount < 0
handles.currentSlice = handles.currentSlice - 1;
end
guidata(hObject,handles);
我一直收到错误:&#34;使用Image_GUI_new错误&gt;轮没有足够的输入参数。&#34;
我在Matlab中没有丰富的GUI经验,所以任何帮助都会受到赞赏。
答案 0 :(得分:2)
你非常接近!
默认情况下,回调函数在按照您的定义时分配了2个输入参数:
set(gcf, 'WindowScrollWheelFcn', @wheel);
相当于
set(gcf, 'WindowScrollWheelFcn', @(DummyA,DummyB) wheel);
如果你需要添加一个输入参数,例如handles
结构,你可以在单元格数组中包装所有输入变量(即2个强制加上你喜欢的任何内容),如下所示:
set(gcf, 'WindowScrollWheelFcn', {@wheel,handles});
因此,函数wheel
接受2个强制输入+ handles
结构。那现在应该可以了。
如果可以的话,重复使用imshow
在性能方面效果不佳,如果要在ct_slider_Callback
中连续显示多张图片,可能需要使用此技巧:
1)当显示第一张图像(此处为数字1)时,将句柄指定为imshow
的输出。
hShow = imshow(handles.imageArray(:,:,1));
2)然后在执行回调时,不要再次调用imshow
,而是更新创建的cdata
句柄的hShow
属性:
set(hShow,'cdata',handles.imageArray(:,:, handles.currentSlice)));
您可能会看到图像显示得更加流畅......
希望有所帮助!