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

YYC*_*YYC 7 matlab figure

有没有办法将图形打印到剪贴板,以便质量与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.

谢谢您的帮助.

gno*_*ice 6

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

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.


YYC*_*YYC 2

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

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

  1. 图元文件
  2. 保存信息
  3. 位图

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

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