2010年2月5日 星期五

[VFP] 如何將網路攝機webcam的動態影像直接在form顯示?

瀏覽數
來源: http://vfp.sunyear.com.tw/viewtopic.php?t=4513&start=0&postdays=0&postorder=asc&highlight=usb

程式碼:
Form1=  CreateObject("Form1")
Form1.Show
Read Events
RETURN

DEFINE CLASS Form1 AS form
ccdhwnd = 0
Name = "Form1"
ShowWindow=2 && 頂層表單 (為影像要放在本Form,故須取得 hwnd ) HWnd = 0 width = 640 height = 480 autocenter = .t.

PROCEDURE Unload
retval=sendmessage( thisform.HWnd,0x400+11,0,0) && 取消CCD裝置連接
CLEAR EVENTS
ENDPROC

PROCEDURE Init
IF thisform.HWnd=0 &&--vfp9 have HWnd
thisform.HWnd = GetForegroundWindow() && 取得本form 的 hwnd
ENDIF
thisform.ccdhwnd = capcreatecapturewindow( "我的攝影機",0x40000000+0x10000000, 0,0,640,480,thisform.HWnd , 0 ) && 建立CCD 子視窗,並傳回hwnd
&& 視窗標題 ,子視窗+顯示 ,x,y,width,height,目前form hwnd, 0
if 0=sendmessage( thisform.ccdhwnd,0x400+10,0,0) && 將CCD裝置連接到 CCD視窗 && hwnd,連接指令,裝置代號(內定0),0 -9
messagebox( "連接失敗")
RETURN .f.
endif
**retval=sendmessage( thisform.ccdhwnd,0x400+14,len( Caps),Caps) && 傳回CCD的最大能力 (Caps 為結構型變數,故不執行本列)
retval=sendmessage(thisform. ccdhwnd,0x400+52,66,0) && 設定每毫秒預視速率rate 15 FPS
retval=sendmessage(thisform. ccdhwnd,0x400+50,1,0) && 啟動攝影機開始預視
RETURN .t.
ENDPROC

PROCEDURE Load
Declare integer SendMessage in user32 integer,integer,Integer, integer && hwnd,指令,參數1,參數2
Declare integer capCreateCaptureWindow in avicap32 string,integer,integer, integer,integer,integer, integer,integer
Declare integer GetForegroundWindow in user32
ENDPROC

ENDDEFINE

沒有留言: