2008年4月8日 星期二

week7-心得

BCB之前老師講解到有個不懂的地方:為何片段的程式碼中,i 要跑10次的迴圈,而不跑1.2.3次就好,因為就算跑1次和跑10次都也只會讀取到第一個camera 。

下段語法的功用:抓取電腦是否有連接到camera,並只讀取第一個連接到的camera 。

縮減語法
將範例中的0~10的迴圈

for(i=0;i<10;i++) if(capDriverConnect(hwndCapture,i)) break; if(i==10) { // Unable to connect to the capture ShowMessage("Can't connect to any capture!"); exit(EXIT_FAILURE) ; }

修改成一行語法

if(capDriverConnect(hwndCapture,0))

結論:實際插入兩台camera作實驗,發現不管是A或B,A先插入再插B,或是先插B再插A,,只要哪個camera先插入,就先擷取那個camera的畫面,因此 i 跑10次的迴圈基本是和跑一行是一樣的,所以將 i 寫成迴圈無實質意義。

解決方法&想法:後來有問老師,而老師也說,基本上如果是老師自己寫這種程式的話,也只會寫一行;也許寫成迴圈的這種方式,也許就是我們這種初學者,剛開始學,要慢慢累積經驗,才會發現更簡單的寫法,或許換作是我也會那樣寫吧,講義的作者依據電腦可能讀取的插槽數量,判斷電腦最多能讀取到的camera數量,但程式卻也只讀取第一個插入電腦插槽的camera,或許這是作者未注意到的部分。

2 則留言:

秦政 提到...

HWND會為視訊擷取視窗編號,最多可以容納
1~10個視窗,或許他在編號的時候,不一定會照著順序邊,for迴圈之所以會跑10次,就是要檢查每一個視訊視窗,避免漏掉吧?

匿名 提到...

我知道你說的意思,但已經偏離問題重心,我說的是寫成for迴圈與寫成單行的必要性,因為程式只會讀取第一個先插入的攝影機,所以也不一定要寫成for迴圈