-1

我正在尝试在 MATLAB 中ButtonDownFcn的图形上使用 。imagesc我想通过单击我在工具栏上创建的自定义按钮来启用此功能。

ButtonDownFcn调用方法,使其返回使用 选择的像素的位置ButtonDownFcn,以便我可以绘制该像素如何随时间变化的图形。

注意:
- 我在 matlab 中使用 GUIDE
-imagesc正在绘制一个 3D 矩阵。我已经实现了允许我使用在 GUIDE 中创建的按钮浏览图像如何随时间变化的代码。

目前,我正在努力解决的ButtonDownFcnimagesc. 我一遍又一遍地阅读如何做到这一点(通过互联网上的研究),但我似乎无法让它发挥作用。

任何帮助表示赞赏。

这是我的代码:

    % --------------------------------------------------------------------
function ui_throughTime_ClickedCallback(hObject, eventdata, handles)
% hObject    handle to ui_throughTime (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
valS = get(handles.txt_zaxis,'string');
display(valS);
val = str2num(valS);
d = handles.data;
m = imagesc(d(:,:,val),'parent',handles.axis, 'HitTest', 'off','buttondownfcn',{@getPlace, handles});
set(handles.axis,'buttondownfcn',{@getPlace, handles,m});

function getPlace(hObject,handles,event_obj,place)
% data = randn(120,160); 
% ax = axes;
% imagesc(data,);
if (gcf == place)
    pause(1); 
    cursor = get(handles.axis,'CurrentPoint'); % get point
    % Get X and Y from point last clicked on the axes 
    x = (cursor(1,1));
    y = (cursor(1,2));
    disp(['x = ' num2str(x) ' y = ' num2str(y)]); 
end
4

1 回答 1

1

这是一个简单的例子:

%% Init
fig_h = figure('CloseRequestFcn', 'run = 0; delete(fig_h);');
rgb = imread('peppers.png');
run = 1; t = 0;

%% Loop
while run
    t = t + 0.05;
    imagesc(rgb*sin(t), 'ButtonDownFcn', 'disp(''Clicked'')');
    pause(0.01);
end

'ButtonDownFcn'正在使用图像的上方,因此图像的'HitTest'属性必须是'On'

下面是'ButtonDownFcn'使用轴的情况,并且由于图像位于轴的前面,因此'HitTest'图像的属性应该是'Off',否则轴将无法选择。

%% Loop
ax = axes;
while run
    t = t + 0.05;
    imagesc(rgb*sin(t), 'Parent', ax, 'HitTest', 'Off');
    set(ax, 'ButtonDownFcn', 'disp(''Clicked'')')
    pause(0.01);
end

也可以使用图形'ButtonDownFcn',并且图像'HitTest'应该是'Off'。但是,在这种情况下,应以编程方式过滤图像(或感兴趣区域)之外的点击点。

希望能帮助到你。

于 2013-07-05T20:53:33.940 回答