如何通过PRINT功能将图形打印到剪贴板,其质量与“编辑 - >复制图”选项相同?

时间:2010-12-15 18:46:10

标签: matlab figure

有没有办法将图形打印到剪贴板,以便质量与Edit-->Copy Figure选项提供的相同?

我曾经使用从Matlab Central获得的saveppt.m将图形保存到powerpoint文件中。它一直运作到昨天。我注意到存储的图像质量有所降低。我尝试使用完全相同的脚本和相同的源数据重新生成一些ppt幻灯片,但新幻灯片质量更差。

我稍微研究了这个问题并发现当通过运行print -dmeta将图形复制到剪贴板时,剪贴板中的图像已经降级,而如果我使用Edit-->Copy Figure选项在图形窗口中,我得到的图像与图窗口中的原始图像一样清晰。

以下是供您参考的示例。我通过两种不同的方法将图像从图形复制到剪贴板,然后将其粘贴到Microsoft Paint程序中,并将其中的一部分剪切到下面显示:

使用print -dmeta的图片:stored figure using "print -dmeta"

使用Edit-->Copy Figure的图片:stored figure using "Copy Figure"

如果您将Xtick标签“50”进行比较,您可能会发现来自Edit-->Copy Figure的图片更加流畅。

一开始我认为这是分辨率的问题,但设置-rN来改变分辨率似乎并不能解决我的问题,至少不是N <= 300。

感谢您的帮助。

2 个答案:

答案 0 :(得分:6)

答案简短...... 使用该菜单项回调中调用的相同函数:

editmenufcn(gcf,'EditCopyFigure');


答案越久...... 我究竟是怎么发现的?您可以查看my previous answerrelated question about reproducing what is done by a File menu option。这个概念是相同的,仅适用于不同的图形菜单。例如,这将为当前活动的图形窗口找到所需的回调:

>> 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')

EDITMENUFCN函数是另一个稀疏记录的函数,但查看代码(通过键入edit editmenufcn.m)表明它调用Java(如果你在Mac上)或未记录的函数UIMENUFCN。

答案 1 :(得分:2)

我想我自己找到了答案。使用print -dmeta -painters指定渲染器可以解决我的问题。

File-->Preference-->Figure Copy Template-->Copy Option我注意到有3个选项:

  1. 元文件
  2. 保留信息
  3. 位图
  4. 我发现如果我选择1,则Edit-->Copy Figure会输出与print -dmeta相同的图像。所以我在Preserve information选项中确认了我需要的信息。快速谷歌搜索引导我讨论应用渲染器的潜在差异,最终我确认使用painters将以我想要的方式将图像打印到剪贴板。

    问题中的图像似乎分别由渲染器zbufferpainters生成。我仍然不知道为什么paint -dmeta的默认渲染器会发生变化。