ctp*_*ctp 3 matlab user-interface figure
我正在使用Matlab编程GUI进行实验,测试参与者将查看一系列图像,并在每个图像之后响应图像的评级.
我希望窗口始终保持最大化.图像将显示几秒钟,然后删除,一些滑块将显示为评级.接下来,将隐藏滑块,并显示新图像等...
到目前为止,我已经开始使用最大化的图形窗口,直到我加载图像并使用imshow或image命令显示它,这会导致图形窗口调整大小并适合图像,而不是保持最大化.如果我再次最大化图形窗口,它会导致窗口框架出现明显的闪烁,首先被最大化,然后调整大小,然后再次最大化 - 我想避免的闪烁.
如何保持窗口最大化,并以1:1的比例显示图像(未缩放或调整大小以适应最大化窗口)?
我知道PsychToolbox,但它似乎没有创建滑块的命令(我将用于评级),我宁愿不必从头开始.我也从Matlab文件交换中查看了windowAPI,但仍未找到解决方案.
下面是我现在拥有的一个例子(在Windows 7 64位上使用Matlab R2013a):
screenSize = get(0,'screensize');
screenWidth = screenSize(3);
screenHeight = screenSize(4);
% Create figure window, keeping it invisible while adding UI controls, etc.
hFig = figure('Name','APP',...
'Numbertitle','off',...
'Position', [0 0 screenWidth screenHeight],...
'WindowStyle','modal',...
'Color',[0.5 0.5 0.5],...
'Toolbar','none',...
'Visible','off');
% Make the figure window visible
set(hFig,'Visible','on');
% Maximize the figure window, using WindowAPI
WindowAPI(hFig, 'Position', 'work');
% Pause (in the full version of this script, this would instead be
% a part where some UI elements are shown and later hidden...
pause(1.0);
% Read image file
img = imread('someImage.png');
% Create handle for imshow, and hiding the image for now.
% This is where Matlab decides to modify the figure window,
% so it fits the image rather than staying maximized.
hImshow = imshow(img);
set(hImshow,'Visible','off');
% Show the image
set(hImshow,'Visible','on');
Run Code Online (Sandbox Code Playgroud)
谢谢,克里斯蒂安
尝试使用'InitialMagnification'带有'fit'选项值的参数imshow:
hImshow = imshow(img,'InitialMagnification','fit')
Run Code Online (Sandbox Code Playgroud)
您还可以将文本字符串"fit"指定为初始放大率值.在这种情况下,imshow缩放图像以适合图形窗口的当前大小
又见了本节imshow文档有关'InitialMagnification'.所以,这应该保持你的数字窗口相同的大小.
这将解决失去窗口最大化的问题.
要使图像在屏幕上以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);
Run Code Online (Sandbox Code Playgroud)
请注意,不必指定放大倍数,因为"如果指定轴位置(使用子图或轴),则imshow忽略您可能已指定的任何初始放大率,并默认为'fit'行为",因此适合指定的轴'Parent'.
| 归档时间: |
|
| 查看次数: |
3943 次 |
| 最近记录: |