1

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

% --- 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

谢谢。

4

1 回答 1

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,将您在 handles.axes1 上的绘图复制到隐藏图形,然后将其打印到一个由字符串 fileName 命名的 PNG 文件(由标志“-dpng”指定,您可以使用其他扩展名)。最后它关闭了隐藏的人物。我认为这会起作用,如果不起作用,请告诉我

于 2013-02-27T22:51:14.320 回答