2011-11-16 44 views
2

我设计了以下GUI,其中有一个轴。我想将其中绘制的情节保存为jpeg文件。但是,获得的文件是整个数字窗口的图像。这是我的代码:将绘图保存为Matlab中的JPEG文件

X = 0:pi/100:2*pi; 
    Y = sin(X); 
    fh = figure; 
    Pan1 = uipanel(fh,'Units','normalized','Position',[0 0 0.5 1],'title',... 
     'Panel1'); 
    Pan2 = uipanel(fh,'Units','normalized','Position',[0.5 0 0.5 1],'title',... 
     'Panel2'); 
    haxes = axes('Parent',Pan2,'Units', 'normalized','Position',... 
     [0.25 0.25 0.5 0.5]); 
    hplot = plot(haxes,X,Y); 
    xlabel(haxes,'Time (second)'); 
    ylabel(haxes,'Amplitude (meter)'); 
    title(haxes,'Sine function'); 
    FileName = uiputfile('*.jpg','Save as'); 
    saveas(hplot,FileName); 
+2

不相关的问题,但为什么JPG格式的情节?那会引入文物。 – bos

+0

@bos:我认为图像的最佳格式是jpeg。告诉我,如果我错了。 – julian

+2

我使用.png作为我想保存为图像的所有MATLAB图。他们出来比.jpg更干净。这篇文章(http://www.turnkeylinux.org/blog/png-vs-jpg)解释道:“PNG最适合用于强线条的矢量图形。” – Doresoom

回答

4

saveas只保存数字,而不是个别的情节。

如果你有一个插曲,或uicontrol中的情节一样,你有,你可以使情节的临时副本,将其保存,然后删除临时副本:

ftmp = figure; atmp = axes; 
copyobj(hplot, atmp); 
saveas(ftmp, FileName); 
delete(ftmp); 

如果你不”要在复制步骤中临时副本在屏幕上闪烁,可以使用图的'Position'属性在屏幕外创建它。

希望有帮助!

+0

非常感谢你的回答。 – julian

+0

如果答案解决了问题,请您将其标记为已接受?谢谢。 –

+0

你的回答对我最初创建图像文件的目的是正确的。但是,我还需要显示xlabel,ylabel和标题的标签。这就是为什么我根据你的回答回答了我自己的问题。 – julian

2

@ Sam的答案很重要,我只想补充一点,通过检查FileName字符串变量,Matlab足够聪明,知道要保存哪种文件。如果您将FileName设置为以.jpg结尾的内容,则可以保存一个jpeg。查看saves docs查看所有其他可能的文件类型。

+0

非常感谢您的回答。 – julian

0

这是基于Sam Robertseykanal的回答我的解决方案:

X = 0:pi/100:2*pi; 
Y = sin(X); 
fh = figure('toolbar','none','menubar','none'); 
Pan1 = uipanel(fh,'Units','normalized','Position',[0 0 0.5 1],'title',... 
    'Panel1'); 
Pan2 = uipanel(fh,'Units','normalized','Position',[0.5 0 0.5 1],'title',... 
    'Panel2'); 
haxes = axes('Parent',Pan2,'Units', 'normalized','Position',... 
[0.125 0.1 0.75 0.75]); 
hplot = plot(haxes,X,Y); 
xlabel(haxes,'Time (second)'); 
ylabel(haxes,'Amplitude (meter)'); 
title(haxes,'Sine function'); 
FileName = uiputfile('*.bmp;*.png;*.jpg;*.tif','Save as'); 
ftmp = figure('Menu','none','Toolbar','none','Units','normalized',... 
    'Position',[-1000 -1000 1 1]); 
new_axes = copyobj(haxes, ftmp); 
set(new_axes,'Units','normalized','Position',[0.1 0.1 0.8 0.8]); 
saveas(ftmp, FileName); 
delete(ftmp); 
delete(fh); 
相关问题