2013-04-02 66 views
2

我不知道如何在MATLAB中完成以下內容。我有一個數字,看起來像這樣:MATLAB:將uipanel的內容打印到PNG圖像

enter image description here


在圖中,我有很多分支情節和一個滾動條,讓我查看面板的一部分的面板。

我想將整個內容保存到一個PNG圖像文件(不只是可見部分),即我想有一個文件,這是一個高大的矩形,並且不需要滾動。

用於產生圖中的代碼如下:

function draw(obj) 
     figure; 
     panel1 = uipanel('Parent',1); 
     panel2 = uipanel('Parent',panel1); 
     panelheight = obj.nIterations/2; 
     set(panel1,'Position',[0 0 0.97 1]); 
     set(panel2,'Position',[0 1-panelheight 1 panelheight]); %% 
     nPlot = 1; 
     for i=1:obj.nIterations 
      models = obj.iterations{i}; 
      for nModel=1:length(models) 
       subplot(obj.nIterations,length(models)*2,nPlot); 
       nPlot = nPlot + 1; 
       drawTransitions(models{nModel}); 
       set(gca,'Parent',panel2); 
       subplot(obj.nIterations,length(models)*2,nPlot); 
       nPlot = nPlot + 1; 
       drawRewards(models{nModel}); 
       set(gca,'Parent',panel2); 
      end 
     end 
     s = uicontrol('Style','Slider','Parent',1,... 
     'Units','normalized','Position',[0.97 0 0.03 1],... 
     'Value',1,'Callback',{@slider_callback1,panel2,panelheight}); 
end 

我曾嘗試以下,沒有成功。

  1. saveas funstion保存整個數字,而不僅僅是面板。此外,它會剪切面板的不可見部分。
  2. export_fig(panel2.'file.png')只給出了一個純灰色的圖像。
+0

這是一個很好的問題。我也試圖做類似的事情,但必須用'getframe'解決,但這隻能用於打印屏幕,並會截斷圖像。 – Justin

+0

f = figure怎麼樣;打印(F, ' - djpeg', 'file.jpg'); ?我不確定。 –

+0

@MinLin,謝謝你,但你的解決方案會截斷圖像,而我希望文件包含屏幕上不可見的位。 – ziutek

回答

0

爲什麼不直接滾動面板並抓住框架並將它們連接在一起?這裏有一些基本上會這樣做的代碼。我會張貼形象,但我想我沒有足夠的積分。您可能需要擺弄滾動,並可能使滑塊不可見,但它可以工作。

function printPanel(pnl,filename) 




fig = figure(ancestor(pnl,'figure')); 

pnl_units = get(pnl,'units'); 
fig_units = get(fig,'units'); 

set(pnl,'units','pixels') 
set(fig,'units','pixels') 

pnl_rect = getpixelposition(pnl); 
fig_rect = getpixelposition(fig); 

pnl_height = pnl_rect(4); 
fig_height = fig_rect(4); 

pnl_rect(2) = -pnl_height; 
set(pnl,'position',pnl_rect) 


N = ceil(pnl_height/fig_height); 

CDATA = cell(N,1); 

for i = 1:N 
    F = getframe(fig); 
    CDATA{i} = F.cdata; 
    pnl_rect(2) = pnl_rect(2)+fig_height; 
    set(pnl,'position',pnl_rect) 
    drawnow 
end 


set(pnl,'units',pnl_units) 
set(fig,'units',fig_units) 

imwrite(cat(1,CDATA{:}),filename) 
end 
0
  • 你可以擺脫UI元素,也將讓所有的次要情節的人物,然後導出一個,使用例如print -dpng ...

  • saveas將句柄作爲第一個參數。也許這不一定是數字或模型句柄,但可以是對面板內容的參考。