有没有办法将图形打印到剪贴板,以便质量与Edit-->Copy Figure选项提供的相同?
我曾经使用从Matlab Central获得的saveppt.m将图形保存到powerpoint文件.它一直运作到昨天.我注意到存储的图像质量有所降低.我尝试使用完全相同的脚本和相同的源数据重新生成一些ppt幻灯片,但新幻灯片质量更差.
我稍微研究了这个问题并发现当通过运行将图形复制到剪贴板时,剪贴板中print -dmeta的图像已经降级,而如果我Edit-->Copy Figure在图窗口中使用该选项,我会得到与原始图像一样清晰的图像图窗口中的图像.
以下是一个供您参考的示例.我通过两种不同的方法将图像从图形复制到剪贴板,然后将其粘贴到Microsoft Paint程序中,并将其中的一部分剪切为如下所示:
图像使用print -dmeta:
图像使用Edit-->Copy Figure:
如果您将Xtick标签"50"进行比较,您可能会看到图像Edit-->Copy Figure更平滑.
一开始我认为这是分辨率的问题,但设置-rN更改分辨率似乎并没有解决我的问题,至少不是N <= 300.
谢谢您的帮助.
简答题...使用在该菜单项的回调中调用的相同函数:
editmenufcn(gcf,'EditCopyFigure');
Run Code Online (Sandbox Code Playgroud)
答案越长......我究竟是怎么发现的?您可以查看我之前关于再现"文件"菜单选项所执行操作的相关问题的答案.这个概念是相同的,仅适用于不同的图形菜单.例如,这将为当前活动的图形窗口找到所需的回调:
>> hCopyFigure = findall(gcf,'Label','Copy &Figure'); %# Handle for the "Copy
%# Figure" menu item
>> get(hCopyFigure,'Callback') %# Callback invoked when that item is selected
ans =
editmenufcn(gcbf,'EditCopyFigure')
Run Code Online (Sandbox Code Playgroud)
函数EDITMENUFCN是另外一个稀疏记录的函数,但查看代码(通过键入edit editmenufcn.m)表明它调用Java(如果你在Mac上)或未记录的函数UIMENUFCN.
我想我自己找到了答案。使用print -dmeta -painters指定渲染器解决了我的问题。
我注意到File-->Preference-->Figure Copy Template-->Copy Option有 3 个选项:
我发现如果我选择 1,Edit-->Copy Figure输出的图像与 相同print -dmeta。所以我确认了我需要的信息在选项中Preserve information。快速的谷歌搜索让我讨论了所应用的渲染器的潜在差异,最终我确认使用painters将按照我想要的方式将图像打印到剪贴板。
问题中的图像似乎分别由渲染器zbuffer和生成painters。不过,我仍然不知道为什么默认渲染器会发生paint -dmeta变化。