使用侦听器在GUI中使用滚动条更新图像

时间:2016-06-28 17:32:27

标签: matlab user-interface matlab-figure matlab-guide

我试图创建一个GUI,在其中我在一些图像上绘制几个点。 我有一个滚动条来更新正在显示的图像,我需要将这些点继续绘制在我使用滚动条选择的任何图像上。 我创建了一个类,我存储GUI句柄,点坐标和监听器。此外,我创建了几个方法,包括一个用于创建侦听器的方法,另一个用于在用户更新图像时绘制点的方法。 这是我的一段代码:

    classdef CircularRoi < handle
    properties
        x       = [];
        y       = [];
        xc      = [];
        yc      = [];
        handles = [];
        hl      = [];
    end
    properties (SetObservable = true)
        slice = [];
    end

    methods
        function obj = CircularRoi(hdl, value)
            obj.handles = hdl;
            obj.slice   = value;
            obj.addListener;
        end
        function addListener(obj)
            obj.hl = addlistener(obj.handles.sld_img, ...
                'Value', 'PostSet', ...
                @(src, event)plotRoi(obj, src, event));
        end
        function getRoi(obj, hdl, src, event)
            obj.getRoiCircle;
            obj.slice = get(hdl.sld_img, 'Value');
        end
        function plotRoi(obj, src, event)
            axeshandle = obj.handles.axs_img;
            obj.slice = get(obj.handles.sld_img, 'Value');
            disp(obj.slice)
            txt = findobj(get(axeshandle, 'Children'), 'Type', 'Text');
%             img = findobj(get(axeshandle, 'Children'), 'Type', 'Image');
%             img = img(1);
            delete(txt);
%             imshow(get(img, 'CData'), [], 'parent', axeshandle);
            plot(axeshandle, obj.x, obj.y, '*b', obj.xc', obj.yc', 'c');
            for ii = 1: length(obj.x)
                text(obj.x(ii), obj.y(ii), num2str(ii), 'color', 'c', 'Parent', axeshandle);
            end
        end

我的问题是,当我使用滚动条更新图像时,会调用pl​​otRoi函数并绘制点,但一旦发生这些点,它们就会消失,就好像图像被绘制在它们上面一样。

知道发生了什么事吗?

提前谢谢大家。

0 个答案:

没有答案