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