【问题标题】:Matlab ButtonDownFcn not working with imageMatlab ButtonDownFcn 不适用于图像
【发布时间】:2016-07-30 22:17:10
【问题描述】:

我正在尝试使用按钮放大 Mandelbrot 集的区域。我正在使用 GUIDE,因此想使用轴的 ButtonDownFcn。我将图像存储在一个名为imag 的数组中,其中包含xy 坐标和颜色。

可以在绘图之前调用该函数,但是当我使用以下命令显示图像时,它不再可以访问:

axes(handles.DrawAxes);
cla

imagesc(imag,'HitTest','Off');

【问题讨论】:

    标签: matlab onclick matlab-figure matlab-guide buttonclick


    【解决方案1】:

    As explained here, high-level 绘图函数在调用时实际上会清除坐标区属性。因此,您要么使用hold 函数(这会影响NextPlot 属性),要么只是设置坐标轴ButtonDownFcn 回调after image/imagesc/imshow 被调用。

    这是一个例子:

    % create axes
    ax = axes();
    
    % display image
    img = imread('cameraman.tif');
    imagesc(img, 'Parent',ax, 'PickableParts','none', 'HitTest','off');
    axis(ax, 'image')
    colormap gray
    
    % set click callback
    ax.ButtonDownFcn = @(o,e) disp('axis clicked');
    

    稍后如果您需要更新图像,请使用图像句柄更新CData 属性,而不是重新绘制图像。

    【讨论】:

    • 注意:上面的例子是为 R2014b 引入的 HG2 图形系统编写的。应该很容易为旧版本更改它..
    • 所以我现在可以使用以下命令让 buttondownfnc 工作:axes_handle = handles.DrawAxes; imagesc(imag,'HitTest','Off'); set(axes_handle, 'ButtonDownFcn', {@FcnName,a,b});但是我不确定如何点击位置或访问我的 GUI 的句柄。
    • 这些是单独的问题,您应该创建一个新问题并询问有关该部分的内容。但要开始使用,有一个 CurrentPoint 属性用于检索鼠标位置。至于句柄,您可以使用findobj 或使用guidatagetappdata 将句柄存储在UI 中。
    猜你喜欢
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 2011-09-29
    • 1970-01-01
    • 2015-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多