Как распечатать рисунок в буфер обмена с помощью функции PRINT с качеством, идентичным параметру «Редактировать -> Копировать рисунок»? - PullRequest
7 голосов
/ 15 декабря 2010

Есть ли способ напечатать фигуру в буфер обмена, чтобы качество было таким же, как у опции Edit-->Copy Figure?

Я использовал для сохранения фигуры в файл powerpoint, используя полученный saveppt.mот Matlab Central .Это работало хорошо до вчерашнего дня.Я заметил, что качество сохраненного изображения несколько ухудшилось.Я попытался заново сгенерировать несколько слайдов ppt с тем же сценарием и теми же исходными данными, но новые слайды просто имеют худшее качество.

Я немного исследовал эту проблему и обнаружил, что когда рисунок копируется в буфер обмена с помощью команды print -dmeta, изображение в буфере обмена уже ухудшается, а если я использую параметр Edit-->Copy Figure вОкно рисунка, я получаю изображение так же ясно, как исходное изображение в окне рисунка.

Ниже приведен пример для вашей справки.Я скопировал изображение из фигуры в буфер обмена двумя разными способами, вставил в программу Microsoft Paint и вырезал его, чтобы показать его ниже:

Изображение с использованием print -dmeta: stored figure using

Изображение с использованием Edit-->Copy Figure: stored figure using

Если вы сравните метку Xtick '50', вы можете увидеть, что изображение с Edit-->Copy Figure более гладкое.

Сначала я думал, что это проблема разрешения, но установка -rN для изменения разрешения, похоже, не решает мою проблему, по крайней мере, для N <= 300.</p>

Спасибо за вашу помощь.

Ответы [ 2 ]

6 голосов
/ 15 декабря 2010

Краткий ответ ... Используйте ту же функцию, которая вызывается в обратном вызове для этого пункта меню:

editmenufcn(gcf,'EditCopyFigure');


более длинный ответ ... Как именно я нашел это?Вы можете посмотреть мой предыдущий ответ на связанный вопрос о воспроизведении того, что делается с помощью пункта меню Файл .Концепция та же самая, только для другого меню фигуры.Например, он найдет обратный вызов, который вы хотите для текущего активного окна рисунка:

>> 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.

2 голосов
/ 16 декабря 2010

Я думаю, что нашел ответ сам.Использование print -dmeta -painters для указания средства визуализации решает мою проблему.

В File-->Preference-->Figure Copy Template-->Copy Option Я заметил, что есть 3 варианта:

  1. Метафайл
  2. Сохранить информацию
  3. Растровое изображение

Я обнаружил, что если я выберу 1, Edit-->Copy Figure выведет то же изображение, что и print -dmeta.Так что я вроде подтвердил, что мне нужна информация в опции Preserve information.Быстрый поиск в Google привел меня к дискуссии о разнице потенциалов в применяемом рендерере, и в итоге я подтвердил, что использование painters будет печатать изображение в буфер обмена так, как я хотел.

Похоже, что изображение в вопросе сгенерировано средствами визуализации zbuffer и painters соответственно.Я до сих пор не знаю, почему меняется рендерер по умолчанию paint -dmeta.

...