保存一个matlab图并保留所有句柄

时间:2014-08-19 08:19:26

标签: matlab save figure handles

我正在尝试在MATLAB中使用弹出菜单生成一个图形,该弹出菜单会更改子图的轴。这项工作到目前为止。但是当使用File>保存图形时保存,我的句柄被删除,它显示以下错误消息:

Error using struct2handle
Error while evaluating uicontrol CreateFcn

Error using handle.handle/set
Invalid or deleted object.

Error in popup_test/mimi (line 33)
    set(h1,'XData', [0,8],'YData',[0,8])

Error while evaluating uicontrol Callback

显示,在保存图形时,删除句柄h1。它仍然是一个数字,但ishandle(h1)返回0。

这是我用以下代码制作的代码:

function popup_test2
figure;
a=magic(4);
h1=imagesc(a);
uicontrol(...
    'Style', 'popup',...
    'String', 'first|second',...
    'Position', [20 340 100 50],...
    'Callback', @popupfcn,...
    'CreateFcn', @popupfcn);

    function popupfcn(hObj,event) %#ok<INUSD>
        % Called when user activates popup menu
        val = get(hObj,'Value');
        if val ==1            
            set(h1,'XData', [0,5],'YData',[0,5])
        elseif val == 2
            set(h1,'XData', [0,8],'YData',[0,8])
        end
    end

end

到目前为止,我尝试使用saveas(gcf,'filename.fig')(没有工作)和hgsave进行保存,听起来很有希望,但我还不知道如何正确使用它。

1 个答案:

答案 0 :(得分:1)

您缺少的是在加载图片后重新创建h1。这可以使用以下代码行完成:

h1 = findobj(gcf,'type','image');

findobj找到绘制图像的句柄 - 允许您根据需要更改它。

见最终代码:

function popup_test2
figure;
a=magic(4);
h1=imagesc(a);
uicontrol(...
    'Style', 'popup',...
    'String', 'first|second',...
    'Position', [20 340 100 50],...
    'Callback', @popupfcn,...
    'CreateFcn', @popupfcn);

    function popupfcn(hObj,event) %#ok<INUSD>
        h1=findobj(gcf,'type','image');
        % Called when user activates popup menu
        val = get(hObj,'Value');
        if val ==1            
            set(h1,'XData', [0,5],'YData',[0,5])
        elseif val == 2
            set(h1,'XData', [0,8],'YData',[0,8])
        end
    end

end

请注意,通常应使用guidata保存数据/句柄以及数字。