В Matlab, как сохранить фигуру как изображение так же, как при использовании «Сохранить как ...» в окне фигуры? - PullRequest
8 голосов
/ 21 сентября 2010

При сохранении фигуры, какую функцию использует Matlab? Например, когда пользователь выбирает Файл> Сохранить как ..., а затем выбирает .png или другой формат изображения, что происходит за кулисами?

Я спрашиваю, потому что я пытаюсь автоматизировать сохранение, но когда я использую saveas или print, получающееся изображение действительно пикселизировано. Однако изображение выглядит очень хорошо, когда я сохраняю рисунок, используя метод, описанный выше.

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

Ответы [ 2 ]

9 голосов
/ 21 сентября 2010

Обратный вызов для пункта меню «Сохранить как ...» вызывает функцию FILEMENUFCN, где первый входной аргумент является дескриптором фигуры, в которой находится меню, а второй входной аргумент является строкой 'FileSaveAs'. Если у вас есть дескриптор фигуры, хранящийся в переменной hFigure, то следующая команда должна быть эквивалентна нажатию пункта меню «Сохранить как ...» в этом окне фигуры:

>> filemenufcn(hFigure,'FileSaveAs');


Несколько заметок ...

  • Функция FILEMENUFCN только частично задокументирована. Вы можете сделать help filemenufcn в командном окне, но для этого нет записи в онлайн-документации. В MATLAB 2009a эту функцию можно найти в следующей папке:

    C:\Program Files\MATLAB\R2009a\toolbox\matlab\uitools\filemenufcn.m
    

    Просматривая код функции, выясняется, что в конечном итоге она вызывает либо функцию SAVEAS для файлов .fig, либо функцию HGEXPORT (с дополнительными входными аргументами) для других типов файлов.

  • Мне удалось выследить обратный вызов для пункта меню «Сохранить как ...», просмотрев дочерние элементы окна рисунка и его меню. Вы можете сделать это самостоятельно, задав корневое свойство 'ShowHiddenHandles' равным 'on', а затем пройдя через 'Children' свойства окна рисунка и его меню, используя Команда GET . Альтернативой является использование команды FINDALL , при условии, что вы знаете некоторые свойства искомых объектов. Например, он найдет дескриптор меню «Файл» для текущего окна рисунка:

    >> hFileMenu = findall(gcf,'Label','&File');
    

    И он найдет дескриптор пункта меню «Сохранить как ...» и отобразит его обратный вызов:

    >> hSaveAs = findall(hFileMenu,'Label','Save &As...');
    >> get(hSaveAs,'Callback')
    ans =
    filemenufcn(gcbf,'FileSaveAs')
    
2 голосов
/ 21 сентября 2010

Я не знаю о вас, но для меня сохраненное изображение выглядит хорошо.

Пример кода:

... create some figure ...
saveas(gcf, 'some_figure.png');

Чтобы установить указанное пользователем разрешение, используйте:

print(gcf,'some_figure','-dpng','-rSOMENUMBER')

где SOMENUMBER - параметр, используемый для разрешения. Окончательное решение: (СОМ * 8) х (СЕН * 6)

...