MATLAB:将uipanel的内容打印到PNG图像

时间:2013-04-02 15:50:48

标签: matlab matlab-figure

我不知道如何在MATLAB中完成以下操作。我有一个看起来像这样的数字:

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')仅提供稳定的灰色图像。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

  • 你可以摆脱ui元素,只需用所有子图创建一个图形,然后使用例如导出那个子图。 print -dpng ...

  • saveas将句柄作为第一个参数。也许这不一定是数字或模型句柄,但可以是对面板内容的引用。