14 用 Screen 函數(shù)打開一個窗口

從今天開始务漩,我打算邊解釋 PTB 自帶的 demo 程序,邊講解一些涉及到的知識點蒲每,這樣進度會快一點研侣。

PTB 的 demo 可以在 Psychtoolbox Demos 網(wǎng)站上獲取。另外楞泼,在安裝目錄的 PsychDemos 文件夾下也有大量的 demo 程序驰徊。

這次介紹下 Screen 的窗口操作。

在屏幕上顯示一些內(nèi)容堕阔,是我們用得最多的功能棍厂。要在屏幕上顯示內(nèi)容,需要先打開一個窗口超陆。

Psychtoolbox Demos 網(wǎng)站上的第一個 demo 就演示了如何打開窗口牺弹,并獲得一些其他信息。

% 第一塊 Clear the workspace and the screen
sca;
close all;
clearvars;

% 第二塊 Here we call some default settings for setting up Psychtoolbox
PsychDefaultSetup(2);

% 第三塊 Get the screen numbers. This gives us a number for each of the screens
% attached to our computer.
screens = Screen('Screens');

% 第四塊 To draw we select the maximum of these numbers. So in a situation where we
% have two screens attached to our monitor we will draw to the external
% screen.
screenNumber = max(screens);

% 第五塊 Define black and white (white will be 1 and black 0). This is because
% in general luminace values are defined between 0 and 1 with 255 steps in
% between. All values in Psychtoolbox are defined between 0 and 1
white = WhiteIndex(screenNumber);
black = BlackIndex(screenNumber);

% 第六塊 Do a simply calculation to calculate the luminance value for grey. This
% will be half the luminace values for white
grey = white / 2;

% 第七塊 Open an on screen window using PsychImaging and color it grey.
[window, windowRect] = PsychImaging('OpenWindow', screenNumber, grey);

% 第八塊 Now we have drawn to the screen we wait for a keyboard button press (any
% key) to terminate the demo.
KbStrokeWait;

% 第九塊 Clear the screen.
sca;

運行程序時时呀,要記得把除了 matlab 以外的其他程序张漂,能關(guān)閉退出的全都關(guān)閉退出,不然谨娜,有可能會出現(xiàn) synchronization error.

最先要學習的是這個 demo 的注釋風格航攒,當然,我們自己熟練以后趴梢,可能不需要這么詳細漠畜。但是為了交流方便,注釋越詳細越好坞靶。

為了指代方便憔狞,后面我會把 demo 程序里面每個用空白行分隔開的代碼稱為 “ 代碼塊 ”。比如彰阴,demo 中的前四行躯喇,就是第一個代碼塊(我在注釋中也添加了這個描述),這當中硝枉,只有第一行是注釋廉丽,后三行都是可執(zhí)行的程序語句。

第一個代碼塊主要是做了一些準備工作妻味,幾乎每個程序都有正压,所以幾乎都是約定俗成了,每個程序的頭幾行都是這個责球。

scaScreen (' CloseAll' ) 的簡寫焦履。其功能就是關(guān)閉所有由 PTB 打開的窗口。

close all 是關(guān)閉所有 matlab 打開的圖形窗口(如用 plot 命令畫出來的函數(shù)圖)雏逾。

clearvars 是清空所有的變量嘉裤。

第二個代碼塊是載入默認的設(shè)置,這個不管了栖博,一般我們都用這個 demo 里的設(shè)置屑宠。有興趣的也可以自己 help PsychDefaultSetup 看看,內(nèi)容也不難仇让。

第三塊和第四塊的代碼是為了獲取當前要操縱的屏幕代號典奉,這個代碼是用數(shù)字標示的。

一般情況下丧叽,我們都只有一個屏幕卫玖,但有時候我們一臺電腦上連接著多個顯示器,那么這不同的顯示器踊淳,我們怎么區(qū)分假瞬?

windows 操作系統(tǒng)用數(shù)字編號來區(qū)分,在我們看來就是 0 號顯示器迂尝,1 號顯示器這類的區(qū)別脱茉。

當只有一個顯示器的時候,你使用的顯示器叫 0 號顯示器雹舀,每添加一塊顯示器芦劣,那個顯示器的編號就增加1,如第二塊顯示器就是 1 號顯示器说榆,第三塊就叫 2 號顯示器虚吟,以此類推。

不同操作系統(tǒng)上签财,這種設(shè)置可能不同串慰,但大體規(guī)則如此。

還有個方法就是在 windows 設(shè)置的顯示屬性中有一個按鈕叫 “檢測”(有些版本是 “識別” 按鈕唱蒸, 如在 win 7 系統(tǒng)中)邦鲫,你點一下它,windows 會在不同的顯示器上顯示一個大大的透明數(shù)字,告訴你這些顯示器分別是幾號顯示器庆捺。

回到這個代碼中來古今,它用了兩行代碼來獲取當前顯示器的數(shù)字編號。

先是使用 screens = Screen ('Screens') 獲得當前系統(tǒng)連接了哪些顯示器滔以,返回值是一個單行矩陣捉腥,它存儲了所有的顯示器編號。

例如你画,有兩塊顯示器抵碟,那 screens 的值就是 [0 1]

然后 screenNumber = max ( screens ) 取變量 screens 中的最大值坏匪,按上例的話拟逮,那意味著后面的一系列操作都只是在 1 號顯示器上進行。當然适滓,如果只有一塊顯示器敦迄,后面的一系列操作都是在當前顯示器上進行。

第五粒竖、六代碼塊涉及到顏色操作的問題颅崩,今天不討論,大家知道蕊苗,經(jīng)過這兩塊代碼后沿后,我們獲得了灰色值,并且把它存儲在變量 gray 中朽砰。

第七塊代碼的功能是打開一個窗口尖滚,后面接著解釋它。

第八塊代碼涉及到了鍵盤輸入的問題瞧柔,今天也不討論漆弄,只需要知道,它會一直等著你按一個鍵造锅,按任意鍵以后撼唾,執(zhí)行其后的語句,也就是第九塊代碼 sca, 程序就結(jié)束了哥蔚。

總之倒谷,這個程序的功能很簡單,打開一個灰色的全屏窗口糙箍,按任意鍵后程序結(jié)束渤愁。

第七塊代碼才是我們今天要說的重點。

[window, windowRect] = PsychImaging('OpenWindow', screenNumber, grey);

PsychImaging 這個函數(shù)的幫助文檔深夯,內(nèi)容比較多抖格,說的多是一些技術(shù)細節(jié),干脆也不管了,只管這個具體用法雹拄。

實際上收奔,這個函數(shù)接受了三個參數(shù),第一個參數(shù) OpenWindow 是一個指令办桨,告訴它我要做的事情是打開一個窗口筹淫;第二個參數(shù)是告訴它我在哪個顯示器上打開窗口;最后一個參數(shù)是指定了這個窗口的顏色呢撞。所以,你運行這個程序以后饰剥,它就打開了一個灰色的窗口殊霞,還是全屏的。

它的返回值汰蓉,有兩個绷蹲。第一個返回值 window 可以理解為你打開的那個窗口的名字。以后呈現(xiàn)刺激顾孽、顯示指導語等工作祝钢,就是對這個窗口來操作的。

請注意若厚,窗口要在某個顯示器中打開拦英,具體的一些視覺刺激的呈現(xiàn)工作要在打開的那個窗口中操作,這個待操作的窗口用某個變量指代测秸,如這里的 window疤估。請不要弄混了。

返回值 windowRect 霎冯,給出了打開的窗口大小铃拇,它是用一對坐標值描述,所以你運行完程序以后沈撞,在左邊的變量列表中可以看到 windowRect 的值慷荔。比如,我這里的結(jié)果是 [ 0 0 2560 1440 ]

簡單介紹一下顯示器的坐標系缠俺。我們知道显晶,顯示器還有一個很重要的參數(shù)是分辨率,如我的顯示器分辨率是 2560 X 1440晋修,這意味著吧碾,這塊顯示器橫向上有 2560 個像素點,縱向上有 1440 個像素點墓卦,一共有 3686400 個像素點倦春。

這每個像素點都有對應的一個坐標,這個坐標系可以用下面的圖來表示:


描述像素點位置的坐標系

左上角的那個是起點,右下角的才是這個顯示器最大分辨率的位置睁本。顯然尿庐,對于一個矩形來說,只需要給出兩個坐標點就可以描述這個矩形呢堰。PTB 就是這樣做的抄瑟,對于任意一個矩形,只給出左上角和右下角的像素點坐標枉疼。

現(xiàn)在皮假,我們能理解 PsychImaging 打開一個窗口以后,返回windowRect 值的意義了骂维。[0 0 2560 1440] 這個矩陣的前兩個值是矩形左上角那個點的坐標惹资,后兩個值是矩形右下角那個點的坐標。顯然航闺,這個矩陣的大小信息褪测,我們也能知道。

據(jù)此潦刃,我們還可以獲得其他信息侮措,如屏幕的中心位置在哪里?還有乖杠,如果想把一個寬為 400 像素分扎,高為 300 像素的矩形放到屏幕的中心,那么這個矩形的位置坐標應該是什么滑黔?這些問題笆包,大家可以思考下。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末略荡,一起剝皮案震驚了整個濱河市庵佣,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌汛兜,老刑警劉巖巴粪,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異粥谬,居然都是意外死亡肛根,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進店門漏策,熙熙樓的掌柜王于貴愁眉苦臉地迎上來派哲,“玉大人,你說我怎么就攤上這事掺喻“沤欤” “怎么了储矩?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長褂乍。 經(jīng)常有香客問我持隧,道長,這世上最難降的妖魔是什么逃片? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任屡拨,我火速辦了婚禮,結(jié)果婚禮上褥实,老公的妹妹穿的比我還像新娘呀狼。我一直安慰自己,他們只是感情好性锭,可當我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布赠潦。 她就那樣靜靜地躺著,像睡著了一般草冈。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上瓮增,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天怎棱,我揣著相機與錄音,去河邊找鬼绷跑。 笑死拳恋,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的砸捏。 我是一名探鬼主播谬运,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼垦藏!你這毒婦竟也來了梆暖?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤掂骏,失蹤者是張志新(化名)和其女友劉穎轰驳,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體弟灼,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡级解,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了田绑。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片勤哗。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖掩驱,靈堂內(nèi)的尸體忽然破棺而出芒划,到底是詐尸還是另有隱情冬竟,我是刑警寧澤,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布腊状,位于F島的核電站诱咏,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏缴挖。R本人自食惡果不足惜袋狞,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望映屋。 院中可真熱鬧苟鸯,春花似錦、人聲如沸棚点。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽瘫析。三九已至砌梆,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間贬循,已是汗流浹背咸包。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留杖虾,地道東北人烂瘫。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像奇适,于是被迫代替她去往敵國和親坟比。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,611評論 2 353

推薦閱讀更多精彩內(nèi)容