2011-11-16 85 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);