问题描述
我正在Matlab中制作一个GUI,该GUI可以滚动并显示约600幅医学图像.我有一个显示图像的轴,还有一个滚动条,当按下结束箭头时,滚动条可以一次浏览一次图像.
I'm making a GUI in Matlab that scrolls through and displays ~600 medical images. I have an axes on which the images are displayed, and a scrollbar that presently goes through images one at a time when the end arrows are pressed.
我正在尝试找出如何合并WindowScrollWheelFcn的方法,以便可以使用鼠标上的滚动更快地浏览图像.
I'm trying to figure out how to incorporate the WindowScrollWheelFcn so I can use the scroll on the mouse to go through the images faster.
这是我的代码:
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);
我不断收到错误消息:使用Image_GUI_new> wheel时输入参数不足."
I keep getting the error: "Error using Image_GUI_new>wheel Not enough input arguments."
我在Matlab中没有使用GUI的丰富经验,因此将不胜感激.
I don't have extensive experience with GUIs in Matlab so any help would be appreciated.
推荐答案
您非常接近!
默认情况下,按照定义的方式为回调函数分配2个输入参数:
By default, callback functions are assigned 2 input arguments when defined as you did:
set(gcf, 'WindowScrollWheelFcn', @wheel);
等同于
set(gcf, 'WindowScrollWheelFcn', @(DummyA,DummyB) wheel);
如果您需要添加输入参数(例如handles
结构),则可以将所有输入变量(即2个必需变量以及您想要的任何变量)包装在单元格数组中,如下所示:
If you need to add an input argument, the handles
structure for instance, you can wrap up all the input variables (i.e. 2 mandatory plus whatever you like) in a cell array as follows:
set(gcf, 'WindowScrollWheelFcn', {@wheel,handles});
因此,功能wheel
接受2个强制输入+ handles
结构.现在应该可以了.
Hence the function wheel
accepts the 2 mandatory inputs + the handles
structure. That should work now.
如果可以的话,重复使用imshow
并不是很好的性能,如果要在ct_slider_Callback
中连续显示许多图像,则可能要使用此技巧:
If I may, using imshow
repetitively is not good performance-wise and you might want to use this trick if you are to display many images continuously in your ct_slider_Callback
:
1)显示第一个图像(此处为数字1)时,将一个手柄作为输出分配给imshow
.
1) When displaying the 1st image (here number 1), assign a handle as the output to imshow
.
hShow = imshow(handles.imageArray(:,:,1));
2)然后,在执行回调时,无需再次调用imshow
,而是更新创建的hShow
句柄的cdata
属性:
2) Then as the callback is executed, instead of calling again imshow
, update the cdata
property of the hShow
handles created:
set(hShow,'cdata',handles.imageArray(:,:, handles.currentSlice)));
您可能会看到图像显示更流畅...
You might see that images are displayed more smoothly...
希望有帮助!
这篇关于Matlab GUI中带有滑块的WindowScrollWheelFcn的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!