2013-11-14 90 views
2

我在Matlab中爲一個GUI進行GUI編程,實驗中測試參與者將查看一系列圖像,並在每個圖像之後響應圖像的評分。如何在顯示新圖像時保持Matlab圖形窗口最大化?

我要始終保持最大化的窗口。圖像將顯示幾秒鐘,然後移除,一些滑塊將顯示評級。接下來,滑塊將被隱藏,並出現一個新的圖像,等等...

我到目前爲止開始罰款與最大化的數字窗口,直到我加載圖像並顯示它,使用imshow或image命令,這會導致圖形窗口調整大小並適合圖像,而不是保持最大化。如果我再次使圖形窗口最大化,它會首先使窗框顯着閃爍,然後再調整大小,然後再次最大化 - 這是我想避免的閃爍。

我怎樣才能保持窗口最大化,並且在1顯示圖像:1的比例(不進行縮放或調整大小以適應最大化窗口)?

我知道PsychToolbox,但它似乎沒有創建滑塊(我將用於評級)的命令,我寧願不必從頭開始做這些。 我也研究過從Matlab File Exchange的windowAPI,但還沒有找到解決方案。

下面是我現在(用Matlab R2013a在Windows 7 64位)的例子:

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'); 

感謝, 基督教

回答

3

的使用'InitialMagnification'參數與'fit'選項嘗試值與imshow

hImshow = imshow(img,'InitialMagnification','fit') 

this MathWorks tutorial

您還可以指定文本字符串「適合」作爲初始放大倍數值。在這種情況下,imshow縮放圖像以適應數字窗口的當前大小

this section of the imshow docs見關於'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); 

注意不需要指定放大率因爲「如果你指定的軸位置(使用副區或軸),imshow忽略你可能已經指定的任何初始的放大倍數和默認爲'fit'行爲」,從而嵌合到由'Parent'指定的軸。

+0

感謝您的建議 - 只是試了一下。但是,這會縮放圖像。我需要將圖像「按原樣」顯示,屏幕上顯示1像素至1點 - 不縮放。 另一個說明:可以看到效果不使用'WindowAPI(hFig,'Position','work');' line from my code example。 – ctp

+0

@ user2994048 - 我終於可以重現它了。關於規模,我看到了這個問題,我認爲你需要創建一個合適大小的軸並將其顯示。 – chappjc

+0

@ctp - 剛剛驗證過,創建一個'axes'並通過''Parent''參數顯示到''中可防止'imshow'調整圖形或'axes'的大小。 – chappjc

相關問題