Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.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_User Interface_Figure - Fatal编程技术网

如何在显示新图像时使Matlab图形窗口最大化?

如何在显示新图像时使Matlab图形窗口最大化?,matlab,user-interface,figure,Matlab,User Interface,Figure,我正在用Matlab为一个实验编写一个GUI,在这个实验中,测试参与者将查看一系列图像,在每个图像之后,对图像进行评级 我希望始终保持窗口最大化。图像将显示几秒钟,然后删除,一些滑块将显示评级。下一步,滑块将被隐藏,一个新的图像将出现,等等 到目前为止,我得到的是一个最大化的图形窗口,直到我使用imshow或image命令加载一个图像并显示它,这会使图形窗口调整大小并适应图像,而不是保持最大化。如果我再次最大化图形窗口,它会导致窗口框架出现明显的闪烁,首先是最大化,然后调整大小,然后再次最大化-

我正在用Matlab为一个实验编写一个GUI,在这个实验中,测试参与者将查看一系列图像,在每个图像之后,对图像进行评级

我希望始终保持窗口最大化。图像将显示几秒钟,然后删除,一些滑块将显示评级。下一步,滑块将被隐藏,一个新的图像将出现,等等

到目前为止,我得到的是一个最大化的图形窗口,直到我使用imshow或image命令加载一个图像并显示它,这会使图形窗口调整大小并适应图像,而不是保持最大化。如果我再次最大化图形窗口,它会导致窗口框架出现明显的闪烁,首先是最大化,然后调整大小,然后再次最大化-我希望避免这种闪烁

如何保持窗口最大化,并以1:1的比例显示图像(不缩放或调整大小以适应最大化的窗口)

我知道PsychToolbox,但它似乎没有创建滑块的命令(我将使用它进行评级),我不希望从头开始创建这些命令。 我还研究了Matlab文件交换中的windowAPI,但仍然没有找到解决方案

下面是我现在拥有的示例(在64位Windows 7上使用Matlab R2013a):

谢谢,
Christian

尝试使用
'initial放大倍数'
参数和
'fit'
选项值以及
imshow

hImshow = imshow(img,'InitialMagnification','fit')
发件人:

还可以将文本字符串“fit”指定为初始放大率值。在这种情况下,imshow将缩放图像以适合地物窗口的当前大小

另请参见关于
“初始放大率”
。所以,这应该保持你的图形窗口的大小相同

这将解决丢失窗口最大化的问题


要在屏幕上以1像素到1点的比例显示图像,您可以为图像创建一个正确大小的轴,并将其显示为:

fpos = get(hFig,'Position')
axOffset = (fpos(3:4)-[size(img,2) size(img,1)])/2;
ha = axes('Parent',hFig,'Units','pixels',...
          'Position',[axOffset size(img,2) size(img,1)]);
hImshow = imshow(img,'Parent',ha);

请注意,没有必要指定放大率,因为“如果指定轴位置(使用子批次或轴),
imshow
会忽略您可能指定的任何初始放大率,并默认为
'fit'
行为”,因此,适合于
'Parent'

指定的轴。感谢您的建议-刚刚尝试过。但是,这会缩放图像。我需要的图像显示“原样”,1像素到1点在屏幕上-不缩放。另一方面:不使用
WindowAPI(hFig,'Position','work'),就可以看到效果我的代码示例中的行。@user2994048-毕竟我能够重现它。关于比例,我看到了这个问题,我认为您需要创建一个适当大小的轴并显示到该轴上。@ctp-刚刚验证了创建一个
轴并通过
'Parent'
参数显示到该轴上可以防止
imshow
调整图形或
轴的大小。是的!快到了!现在唯一的事情是图像被缩小了。可能与轴的大小有关?谢谢你迄今为止的帮助!我会试试看我是否能计算出最后一位…@ctp创建的轴的大小将是这样的图像大小。我不知道为什么它对你来说更小。如果您想放大,可以执行
[axOffset scaleVal*[size(img,1)size(img,2)]]
fpos = get(hFig,'Position')
axOffset = (fpos(3:4)-[size(img,2) size(img,1)])/2;
ha = axes('Parent',hFig,'Units','pixels',...
          'Position',[axOffset size(img,2) size(img,1)]);
hImshow = imshow(img,'Parent',ha);