Автоматически максимизировать фигуру

Я создаю некоторые фигуры в MATLAB и автоматически сохраняю их в файлы. Проблема в том, что по определению картинки маленькие. Хороший способ решить мою проблему вручную — создать изображение (рисунок), развернуть его и сохранить в файл.

Мне не хватает этого шага автоматического максимизации фигуры.

Какие-либо предложения? Пока нашел только это:

http://answers.yahoo.com/question/index?qid=20071127135551AAR5JYh

http://www.mathworks.com/matlabcentral/newsreader/view_thread/238699

но никто не решает мою проблему.


person Salvador Dali    schedule 08.03.2013    source источник
comment
Это не должно быть помечено как дубликат. Вопрос о ссылках относится к установке фигуры определенного размера в пикселях. Этот вопрос (и ответ) устанавливает максимальный размер фигуры без привязки к количеству задействованных пикселей.   -  person Pursuit    schedule 07.08.2013


Ответы (10)


Это сработало для меня:

figure('units','normalized','outerposition',[0 0 1 1])

или для текущей цифры:

set(gcf,'units','normalized','outerposition',[0 0 1 1])

Я также использовал функцию MAXIMIZE в FileExchange, использующем java. Это настоящая максимизация.

person yuk    schedule 08.03.2013
comment
Я использую MATLAB 2014a, и эти решения мне не подходят. Фигура максимизируется в порядке, но аспект фигуры, сохраненный в файле, все еще находится в аспекте по умолчанию (и подграфики могут выглядеть смехотворно маленькими в настройках по умолчанию). Я нахожу вариант установки «PaperPosition», указанный в другом потоке MATLAB , чтобы быть полезным для меня. Пользовательский интерфейс фигуры не изменит свой внешний вид, но выходное изображение будет высокого качества! - person HuaTham; 23.10.2014
comment
@HuaTham: вы также можете попробовать отправить export_fig на файловом обмене. Он сохраняет изображение точно так, как вы видите его на экране. - person yuk; 23.10.2014

Для фактического максимизации (точно так же, как нажатие кнопки максимизации в пользовательском интерфейсе OS X и Windows) вы можете попробовать следующее, которое вызывает скрытый дескриптор Java

figure;
pause(0.00001);
frame_h = get(handle(gcf),'JavaFrame');
set(frame_h,'Maximized',1);

pause(n) имеет важное значение, поскольку приведенное выше выходит за рамки Matlab и находится в отдельном потоке Java. Установите n на любое значение и проверьте результаты. Чем быстрее компьютер во время выполнения, тем меньше может быть n.

Полную «документацию» можно найти здесь

person The-Duck    schedule 24.01.2014
comment
Работает нормально, но выдает следующее предупреждение: Warning: The JavaFrame figure property will be removed in a future release. For more information, see Recommendations for Java and ActiveX Users on mathworks.com. Matlab R2019b @ Win10 64bit - person rotton; 21.07.2020

По состоянию на R2018a, figure, а также uifigure объекты содержат свойство с именем WindowState. По умолчанию установлено значение 'normal', но установка значения 'maximized' дает желаемый результат.

В заключении:

hFig.WindowState = 'maximized'; % Requires R2018a

Кроме того, как упоминалось в комментариях Unknown123:

  1. Сделать фигуры максимизированными по умолчанию можно с помощью:

    set(groot, 'defaultFigureWindowState', 'maximized');
    
  2. Максимизировать все открытые фигуры можно с помощью:

    set(get(groot, 'Children'), 'WindowState', 'maximized');
    
  3. Дополнительную информацию о 'WindowState', а также о других свойствах, управляющих внешним видом фигур, можно найти в эта страница документации.

Наконец, чтобы решить вашу первоначальную проблему - если вы хотите экспортировать содержимое рисунков в изображения, не беспокоясь о том, что результаты будут слишком маленькими, - я настоятельно рекомендую export_fig.

person Dev-iL    schedule 25.07.2018
comment
кроме того, вы можете установить его по умолчанию, прежде чем что-либо строить, set(groot, 'defaultFigureWindowState', 'maximized'); - person Unknown123; 22.11.2018
comment
Или установите его для всех открытых фигур set( get(groot, 'Children'), 'WindowState', 'maximized'); - person Unknown123; 22.11.2018
comment
См. Figure Properties документацию mathworks.com/help/matlab/ref /matlab.ui.figure-properties.html в разделе Window Appearance для получения дополнительной информации о WindowState - person Unknown123; 22.11.2018

Чтобы максимизировать цифру, вы можете имитировать последовательность клавиш, которую вы на самом деле используете:

  1. ALT-ПРОБЕЛ (как указано здесь) для доступа к меню окна; а потом
  2. X для максимизации (это может отличаться в вашей системе).

Чтобы отправить ключи программно, вы можете использовать процедуру на основе Java, аналогичную этот ответ следующим образом:

h = figure;                                          %// create figure and get handle
plot(1:10);                                          %// do stuff with your figure
figure(h)                                            %// make it the current figure
robot = java.awt.Robot; 
robot.keyPress(java.awt.event.KeyEvent.VK_ALT);      %// send ALT
robot.keyPress(java.awt.event.KeyEvent.VK_SPACE);    %// send SPACE
robot.keyRelease(java.awt.event.KeyEvent.VK_SPACE);  %// release SPACE
robot.keyRelease(java.awt.event.KeyEvent.VK_ALT);    %// release ALT
robot.keyPress(java.awt.event.KeyEvent.VK_X);        %// send X
robot.keyRelease(java.awt.event.KeyEvent.VK_X);      %// release X

Вуаля! Окно максимальное!

person Luis Mendo    schedule 07.07.2015

Как это было предложено автором выше, если вы хотите имитировать нажатие кнопки "развернуть" кнопку Windows, вы можете использовать следующий код. Разница с упомянутым ответом заключается в том, что использование «drawnow» вместо «pause» кажется более правильным.

figure;
% do your job here
drawnow;
set(get(handle(gcf),'JavaFrame'),'Maximized',1);
person lnstadrum    schedule 08.06.2015
comment
Свойство JavaFrame будет удалено в будущем выпуске. См. mathworks.com/support/contact_us/dev/javaframe.html. - person transversality condition; 22.08.2015

imho максимизация окна рисунка - не лучший способ сохранить рисунок как изображение с более высоким разрешением.

Существуют свойства рисунка для печати и сохранения. . Используя эти свойства, вы можете сохранять файлы в любом разрешении. Чтобы сохранить файлы, вы должны использовать функцию печати, потому что вы можете установить значение dpi. Итак, сначала установите следующие свойства фигуры:

set(FigureHandle, ...
    'PaperPositionMode', 'manual', ...
    'PaperUnits', 'inches', ...
    'PaperPosition', [0 0 Width Height])

а во-вторых, сохраните файл (например) в формате png с разрешением 100 dpi ('-r100')

print(FigureHandle, Filename, '-dpng', '-r100');

Чтобы получить файл с 2048x1536px, установите Width = 2048/100 и высоту 1536/100, /100, потому что вы сохраняете с разрешением 100 dpi. Если вы измените значение dpi, вы также должны изменить делитель на то же значение.

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

person serial    schedule 11.03.2016

вы можете попробовать это:

screen_size = get(0, 'ScreenSize');
f1 = figure(1);
set(f1, 'Position', [0 0 screen_size(3) screen_size(4) ] );
person ifryed    schedule 24.12.2013
comment
это решение не учитывает элементы переднего плана. Например, на моем компьютере с Windows размер экрана больше максимального размера окна из-за панели задач. - person Shai; 14.01.2015

Это самая короткая форма

figure('Position',get(0,'ScreenSize'))
person user48711    schedule 14.01.2015
comment
Не могли бы вы дать больше объяснений? - person Sulthan Allaudeen; 14.01.2015
comment
чем этот ответ отличается от ifryed - person Shai; 14.01.2015

Я рекомендую команду set для изменения свойств MenuBar и Toolbar вашей фигуры. Команда set более универсальна, потому что она работает как для старых, так и для новых версий Matlab.

fig = figure(1);
set(fig, 'MenuBar', 'none');
set(fig, 'ToolBar', 'none');

Теперь вы можете снова использовать set, чтобы сделать вашу фигуру полноэкранной.

set(fig, 'Position', get(0,'Screensize'));

Обратите внимание, что если вы сначала сделаете фигуру полноэкранной, а затем удалите MenuBar и Toolbar, фигура не будет полноэкранной, поэтому убедитесь, что вы запускаете их в правильном порядке.

person juju89    schedule 24.06.2020

person    schedule
comment
Как отмечено условие трансверсальности, применяемый здесь метод опирается на то, что будет удален в будущем выпуске Matlab. Этот код подавляет предупреждение Matlab об этом строкой warning('off',.... - person TTT; 08.11.2017