Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MATLAB:如何在第二台显示器上使图形与屏幕匹配?_Matlab_Size_Screen_Fullscreen_Matlab Figure - Fatal编程技术网

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]); 但它不能做到这一点,而且这个数字只适合显示器屏幕的一部分 任何帮助都将不胜感激,因为我没有主意 最

我只使用连接到笔记本电脑的外部显示器(笔记本电脑的屏幕已关闭)。当我试图让一个MATLAB图形适合屏幕时,它的大小似乎只适合笔记本电脑屏幕(分辨率较低)。我使用以下方法:

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%,这是有效的。我不知道为什么最初的问题如此持久,为什么会出现。