MATLAB:如何在第二台显示器上使图形与屏幕匹配?
我只使用连接到笔记本电脑的外部显示器(笔记本电脑的屏幕已关闭)。当我试图让一个MATLAB图形适合屏幕时,它的大小似乎只适合笔记本电脑屏幕(分辨率较低)。我使用以下方法:MATLAB:如何在第二台显示器上使图形与屏幕匹配?,matlab,size,screen,fullscreen,matlab-figure,Matlab,Size,Screen,Fullscreen,Matlab Figure,我只使用连接到笔记本电脑的外部显示器(笔记本电脑的屏幕已关闭)。当我试图让一个MATLAB图形适合屏幕时,它的大小似乎只适合笔记本电脑屏幕(分辨率较低)。我使用以下方法: figure('outerposition',get(0,'screensize')); % or 'monitorpositions' 我甚至试过: figure('outerposition',[0 0 1 1.2]); 但它不能做到这一点,而且这个数字只适合显示器屏幕的一部分 任何帮助都将不胜感激,因为我没有主意 最
figure('outerposition',get(0,'screensize')); % or 'monitorpositions'
我甚至试过:
figure('outerposition',[0 0 1 1.2]);
但它不能做到这一点,而且这个数字只适合显示器屏幕的一部分
任何帮助都将不胜感激,因为我没有主意
最后,我想做的是让一个图形适合屏幕的90%(例如宽度和高度)
提前谢谢 问题可能与以下方面有关: MATLAB在启动时设置此属性的显示信息值。这些值是静态的。如果系统显示设置更改,则值不会更新。要刷新这些值,请重新启动MATLAB 在我的桌面上,仅在一个活动屏幕上启动Matlab,可以得到:
>> get(0,'MonitorPositions')
ans =
1 1 1280 1024
即使我稍后尝试激活屏幕,它也不会改变。但是,如果我激活第二个屏幕,然后重新启动Matlab,我会得到:
>> get(0,'MonitorPositions')
ans =
-1919 -123 1920 1080
1 1 1280 1024
然后我可以将图形设置为这个大小:
figure('OuterPosition',[-1920 -123 3200 1080]);
它涵盖了两个屏幕。此解决方案基于Doug Schwarz在年编写的
screensize
函数
我做了一些快速测试,似乎返回了预期的结果,在这篇文章的底部找到了我的适应
示例使用
全屏,监视器2
% Pass the monitor number to the screensize function, this example uses monitor 2
sz = screensize(2);
% The function returns pixel values, so must use units pixels
% Set the outerposition according to that.
figure('units', 'pixels', 'outerposition', sz)
仅占屏幕的90%,监视器2:
sz = screensize(2);
pad = 0.05; % 5% padding all around
szpadded = [sz(1:2) + sz(3:4)*pad, sz(3:4)*(1-2*pad)];
figure('units', 'pixels', 'outerposition', szpadded);
屏幕大小
功能
Doug最初的代码依赖于移动鼠标指针来获取位置,我不知道为什么,并对代码进行了精简。我还删除了代码复制等,使事情更紧凑。该函数基本上依赖于从java后端获取屏幕设备数组
function ss_out = screensize(screen_number)
%screensize: return screen coordinates of multiple monitors.
% Version: 1.0, 26 June 2008 Author: Douglas M. Schwarz
% Version: 1.1, 21 July 2017 Author: Wolfie
persistent myss
if isempty(myss)
% Get Screen Devices array.
sd = java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment.getScreenDevices;
% Initialize screensize array.
num_screens = length(sd);
myss = zeros(num_screens,4);
% Loop over all Screen Devices.
for ii = 1:num_screens
bounds = sd(ii).getDefaultConfiguration.getBounds;
myss(ii,:) = [bounds.x, bounds.y, bounds.width, bounds.height];
end
end
num_screens = size(myss,1);
if nargin == 0
screen_number = 1:num_screens;
end
screen_index = min(screen_number,num_screens);
ss_out = myss(screen_index,:);
end
键入时会得到什么:
get(0,'MonitorPositions')
?看看我下面的答案,看看是什么原因导致了这个问题。谢谢你的回复@EBH。您的评论与问题相关,但我在任何时候都没有更改显示设置。始终仅使用外部监视器。问题是,即使我使用“规格化”单位并将“[0 0 1]”作为“OuterPosition”,出于某种原因,它也不会填满整个屏幕。令人惊讶的是,在尝试了许多事情之后,重新启动电脑就成功了!现在,只需将“OuterPosition”添加到“[0 0 1]”即可填充屏幕。但不幸的是,这并不能回答为什么会出现问题。@Jin,我很惊讶你在问之前没有尝试重新启动;)我尝试重新启动MATLAB,但我没有想到重新启动PC,因为我无法从逻辑上解释为什么它能解决问题(尽管我必须承认它经常创造奇迹)。谢谢你的回复@Wolfie。在尝试了很多东西和你的解决方案后,我终于重新启动了我的电脑,这意外地解决了问题。我知道有'OuterPosition'到[0 0 1 1](使用'Normalized'单位)来填充屏幕,[.05.05.90.90]只填充90%,这是有效的。我不知道为什么最初的问题如此持久,为什么会出现。