Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MATLAB:将uipanel的内容打印到PNG图像_Matlab_Matlab Figure - Fatal编程技术网

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

MATLAB:将uipanel的内容打印到PNG图像,matlab,matlab-figure,Matlab,Matlab Figure,我不知道如何在MATLAB中完成以下任务。我有一个像这样的数字: 在图中,我有一个包含许多子窗口的面板和一个滚动条,可以查看面板的一部分 我想将面板的整个内容保存到PNG图像文件中(不仅仅是可见部分),也就是说,我想有一个高矩形的文件,不需要滚动 生成图形的代码如下所示: function draw(obj) figure; panel1 = uipanel('Parent',1); panel2 = uipanel('Parent',panel1)

我不知道如何在MATLAB中完成以下任务。我有一个像这样的数字:


在图中,我有一个包含许多子窗口的面板和一个滚动条,可以查看面板的一部分

我想将面板的整个内容保存到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
我试过以下方法,但没有成功

  • saveas
    功能保存整个图形,而不仅仅是面板。此外,它还会剪裁面板的不可见部分
  • export\u fig(panel2.file.png')
    只给出一个实心的灰色图像

  • 你为什么不滚动你的面板,抓取框架,把它们连在一起呢?下面是一些基本上可以做到这一点的代码。我会发布am图片,但我想我没有足够的分数。你可能需要摆弄滚动,或者让滑动条不可见,但它是有效的

    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
    
    • 您可以去掉ui元素,只需创建一个包含所有子批次的图形,然后使用例如
      print-dpng…
      导出该图形

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


    这是个好问题。我也尝试过做类似的事情,但不得不解决
    getframe
    ,但这只适用于打印屏幕,会截断图像;打印(f,'-djpeg',file.jpg')?我不确定。@MinLin,谢谢你,但是你的解决方案会截断图像,而我希望该文件包含屏幕上看不到的位。如果你能发布一个代码的最小工作示例,那会有所帮助,这样其他人就可以试着直接在Matlab中解决你的问题。