Matlab GUI:如何在用户界面中打印出一个图?

时间:2013-02-27 00:51:40

标签: matlab user-interface printing plot

我在MATLAB中有一个界面,它通过按下按钮2来绘制曲线。现在我无法打印出这个数字。更确切地说,我想添加另一个按钮来打印出情节。这是我的一段代码:

% --- Executes on button press in pushbutton2.
function pushbutton2_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton2 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
%clear
%linkdata on
fileName = handles.fileName;

n_var=str2num(get(handles.n_var,'string'));

[x] = readColumns(fileName, n_var);

axes(handles.axes1);
hold on
plot(handles.axes1,x(1:n),'b','LineWidth',2)
hold off

感谢。

1 个答案:

答案 0 :(得分:1)

看起来您使用GUIDE来制作GUI,因此您应该以相同的方式添加新按钮(通过GUIDE)。假设你已经这样做了,在它的回调函数中你会想要像:

function printButton_Callback(hObject, eventdata, handles)
    fileName = handles.fileName;
    im = getframe(handles.axes1);
    %saves the image in variable "im" to a PNG file 
    imwrite(im.cdata, fileName, 'PNG')
end

函数getframe抓取输入句柄参数的快照(在这种情况下,你的轴处理)并返回一个带有图像数据(“cdata”)和用于框架的颜色图的结构。然后你用imwrite将图像数据写入磁盘,其中fileName可能是一个具有你想要的文件名的字符串,'PNG'告诉imwrite你想要的扩展名(你也可以使用BMP / GIF / JPEG或其他)

同样作为一个轻微的挑剔,在你的问题中你可以互换地使用数字和情节,但这个数字可能与情节不同;也就是说,你的数字将是你的整个GUI,而情节将在你的轴上,这将是你的GUI的孩子。

编辑:要保留轴标签,可能必须使用其他方法。相反,你可以做的是:

function printButton_Callback(hObject, eventdata, handles)
    fileName = handles.fileName;
    f_tmp = figure('visible', 'off');
    copyobj(handles.axes1,f_tmp);
    print(f_tmp, '-dpng', fileName);
    close(f_tmp);
end

这将创建一个隐藏的图形f_tmp,将handle.axes1上的绘图复制到隐藏的图形,然后将其打印到由字符串命名的PNG文件(由标志'-dpng'指定,您可以使用其他扩展名)文件名。最后它关闭了隐藏的数字。我认为这样可行,如果不是,请告诉我