我在MATLAB中创建一些数字并自动将它们保存到文件中。根据定义,图像很小的问题。手动解决我的问题的一个好方法是创建一个图像(图),最大化它,并保存到文件。
我错过了自动最大化数字的这一步。
有什么建议吗? 到目前为止我只发现了这个:
http://answers.yahoo.com/question/index?qid=20071127135551AAR5JYh
http://www.mathworks.com/matlabcentral/newsreader/view_thread/238699
但没有人解决我的问题。
答案 0 :(得分:61)
这对我有用:
figure('units','normalized','outerposition',[0 0 1 1])
或当前数字:
set(gcf,'units','normalized','outerposition',[0 0 1 1])
我还在使用java的FileExchange上使用了MAXIMIZE函数。这是真正的最大化。
答案 1 :(得分:22)
对于实际的Maximize(就像点击OS X和Windows的UI中的最大化按钮一样) 您可以尝试以下调用隐藏Java句柄的方法
figure;
pause(0.00001);
frame_h = get(handle(gcf),'JavaFrame');
set(frame_h,'Maximized',1);
pause(n)
是必不可少的,因为上面的内容超出了Matlab的范围,并且位于一个单独的Java线程上。将n
设置为任意值并检查结果。计算机在执行时的速度越快,n
就越小。
可以找到完整的“文档”here
答案 2 :(得分:8)
As of R2018a,figure
和uifigure
对象包含一个名为WindowState
的属性。默认情况下将其设置为'normal'
,但是将其设置为'maximized'
可以得到所需的结果。
结论:
hFig.WindowState = 'maximized'; % Requires R2018a
顺便解决您的原始问题-如果您想将图形的内容导出到图像而不必担心结果太小-我强烈建议使用export_fig
实用工具。
答案 3 :(得分:6)
要最大化数字,您可以模仿实际使用的键序列:
要以编程方式发送密钥,您可以使用类似于this answer的基于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
瞧!窗户最大化了!
答案 4 :(得分:4)
As it is proposed by an author above,如果要模拟单击“最大化”窗口按钮,可以使用后面的代码。与提到的答案的不同之处在于使用“drawow”而不是“pause”似乎更正确。
figure;
% do your job here
drawnow;
set(get(handle(gcf),'JavaFrame'),'Maximized',1);
答案 5 :(得分:4)
imho最大化图形窗口并不是将图形保存为更高分辨率图像的最佳方法。
printing and saving有数字属性。使用这些属性,您可以以任何所需的分辨率保存文件。要保存文件,您必须使用print function,因为您可以设置dpi
值。因此,首先设置下图属性:
set(FigureHandle, ...
'PaperPositionMode', 'manual', ...
'PaperUnits', 'inches', ...
'PaperPosition', [0 0 Width Height])
然后将文件(例如)保存为png,使用100dpi('-r100'
)
print(FigureHandle, Filename, '-dpng', '-r100');
要获取2048x1536px
设置Width = 2048/100
和高度1536/100
,/100
的文件,因为您使用100dpi保存。如果更改dpi值,则还必须将除数更改为相同的值。
正如您所看到的,文件交换或基于java的过程不需要任何额外的功能。此外,您可以选择任何所需的分辨率。
答案 6 :(得分:2)
你可以试试这个:
screen_size = get(0, 'ScreenSize');
f1 = figure(1);
set(f1, 'Position', [0 0 screen_size(3) screen_size(4) ] );
答案 7 :(得分:1)
%% maximizeFigure
%
% Maximizes the current figure or creates a new figure. maximizeFigure() simply maximizes the
% current or a specific figure
% |h = maximizeFigure();| can be directly used instead of |h = figure();|
%
% *Examples*
%
% * |maximizeFigure(); % maximizes the current figure or creates a new figure|
% * |maximizeFigure('all'); % maximizes all opened figures|
% * |maximizeFigure(hf); % maximizes the figure with the handle hf|
% * |maximizeFigure('new', 'Name', 'My newly created figure', 'Color', [.3 .3 .3]);|
% * |hf = maximizeFigure(...); % returns the (i.e. new) figure handle as an output|
%
% *Acknowledgements*
%
% * Big thanks goes out to Yair Altman from http://www.undocumentedmatlab.com/
%
% *See Also*
%
% * |figure()|
% * |gcf()|
%
% *Authors*
%
% * Daniel Kellner, medPhoton GmbH, Salzburg, Austria, 2015-2017
%%
function varargout = maximizeFigure(varargin)
warning('off', 'MATLAB:HandleGraphics:ObsoletedProperty:JavaFrame')
% Check input variables
if isempty(varargin)
hf = gcf; % use current figure
elseif strcmp(varargin{1}, 'new')
hf = figure(varargin{2:end});
elseif strcmp(varargin{1}, 'all')
hf = findobj('Type', 'figure');
elseif ~isa(varargin{1}, 'char') && ishandle(varargin{1}) &&...
strcmp(get(varargin{1}, 'Type'), 'figure')
hf = varargin{1};
else
error('maximizeFigure:InvalidHandle', 'Failed to find a valid figure handle!')
end
for cHandle = 1:length(hf)
% Skip invalid handles and plotbrowser handles
if ~ishandle(cHandle) || strcmp(get(hf, 'WindowStyle'), 'docked')
continue
end
% Carry the current resize property and set (temporarily) to 'on'
oldResizeStatus = get(hf(cHandle), 'Resize');
set(hf(cHandle), 'Resize', 'on');
% Usage of the undocumented 'JavaFrame' property as described at:
% http://undocumentedmatlab.com/blog/minimize-maximize-figure-window/
jFrame = get(handle(hf(cHandle)), 'JavaFrame');
% Due to an Event Dispatch thread, the pause is neccessary as described at:
% http://undocumentedmatlab.com/blog/matlab-and-the-event-dispatch-thread-edt/
pause(0.05)
% Don't maximize if the window is docked (e.g. for plottools)
if strcmp(get(cHandle, 'WindowStyle'), 'docked')
continue
end
% Don't maximize if the figure is already maximized
if jFrame.isMaximized
continue
end
% Unfortunately, if it is invisible, it can't be maximized with the java framework, because a
% null pointer exception is raised (java.lang.NullPointerException). Instead, we maximize it the
% straight way so that we do not end up in small sized plot exports.
if strcmp(get(hf, 'Visible'), 'off')
set(hf, 'Units', 'normalized', 'OuterPosition', [0 0 1 1])
continue
end
jFrame.setMaximized(true);
% If 'Resize' will be reactivated, MATLAB moves the figure slightly over the screen borders.
if strcmp(oldResizeStatus, 'off')
pause(0.05)
set(hf, 'Resize', oldResizeStatus)
end
end
if nargout
varargout{1} = hf;
end
答案 8 :(得分:0)
这是最短的形式
figure('Position',get(0,'ScreenSize'))
答案 9 :(得分:0)
我建议使用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,则图形将不会全屏显示,因此请确保以正确的顺序运行图形。