More ... | 編集履歴:差分記録開始以来のUSBカメラの画像を表示してみる。の変更箇所
- USBカメラの画像を表示してみる。 - - - [[$$toc]] - - →[[HSP3・サンプルスクリプト]]に戻る - - ---- - - HSP3.1β1 XPsp2 で動作確認~% - - DirectShowのサンプルの応用ですね。~% - ただ問題なのが、パソコンにビデオ入力デバイスが複数枚ある場合面倒です。~% - - '''*当然ではありますが、パソコンにUSBカメラを接続してから実行してください。''' - - * スクリプト - - {{{ - ; <<<< HSP 3.1β1 サンプル >>>> - ; - ; USBビデオカメラの画像を表示してみる。 - ; - - onexit gosub *exit - - #define WS_CHILD 0x40000000 - #define WS_CLIPSIBLINGS 0x4000000 - #define WS_CLIPCHILDREN 0x2000000 - - //-------------インターフェイス登録 - #define IID_IGraphBuilder "{56A868A9-0AD4-11CE-B03A-0020AF0BA770}" - #define CLSID_FilterGraph "{e436ebb3-524f-11ce-9f53-0020af0ba770}" - - #usecom IGraphBuilder IID_IGraphBuilder CLSID_FilterGraph - #comfunc Builder_AddFilter 3 comobj,wstr - #comfunc Builder_RenderFile 13 wstr,nullptr - - #define IID_ICaptureGraphBuilder2 "{93E5A4E0-2D50-11D2-ABFA-00A0C9C6E38D}" - #define CLSID_CaptureGraphBuilder2 "{BF87B6E1-8C27-11d0-B3F0-00AA003761C5}" - - #usecom ICaptureGraphBuilder2 IID_ICaptureGraphBuilder2 CLSID_CaptureGraphBuilder2 - #comfunc Builder2_SetFiltergraph 3 comobj - #comfunc Builder2_FindInterface 6 var,var,comobj,var,var - #comfunc Builder2_RenderStream 7 var,var,comobj,int,int - - #define IID_ICreateDevEnum "{29840822-5B84-11D0-BD3B-00A0C911CE86}" - #define CLSID_SystemDeviceEnum "{62BE5D10-60EB-11d0-BD3B-00A0C911CE86}" - - #usecom ICreateDevEnum IID_ICreateDevEnum CLSID_SystemDeviceEnum - #comfunc CreateDevEnum_CreateClassEnumerator 3 var,var,int - - #usecom IMoniker "{0000000F-0000-0000-C000-000000000046}" - #comfunc Moniker_BindToObject 8 int,int,var,var - - #usecom IEnumMoniker "{00000102-0000-0000-C000-000000000046}" - #comfunc EnumMoniker_Next 3 int,var,var - - #usecom IMediaControl "{56A868B1-0AD4-11CE-B03A-0020AF0BA770}" - #comfunc MediaControl_Run 7 - #comfunc MediaControl_Pause 8 - #comfunc MediaControl_Stop 9 - - #usecom IVideoWindow "{56A868B4-0AD4-11CE-B03A-0020AF0BA770}" - #comfunc VideoWindow_put_WindowStyle 9 int - #comfunc VideoWindow_put_Visible 19 int - #comfunc VideoWindow_put_Owner 29 int - #comfunc VideoWindow_SetWindowPosition 39 int,int,int,int - //--------------------------------------------------------------- - - BaseFilter=1453877397,298715860,536885936,1889995695 - MEDIATYPE_Video=1935960438,1048576,-1442840448,1905997824 - - PIN_PREVIEW=-76791166,298910547,24464,-1172910912 - CLSID_Video=-2046053616,298867969,-1610597443,-2033315383 - - screen 0,320,240 - title "USB カメラ" - - newcom pGraphBuilder, IGraphBuilder - - newcom pCreateDevEnum,ICreateDevEnum - - newcom pClassEnum - CreateDevEnum_CreateClassEnumerator pCreateDevEnum,CLSID_Video,pClassEnum,0 - - //dim Moniker,10;自動確保に任す。 - - repeat - EnumMoniker_Next pClassEnum ,1,Moniker.cnt,cFetched - if cFetched=0{break} - loop - - dialog "ビデオデバイスの数-> "+(-1+length(Moniker))+" あります。" - - /* - USBカメラしかつながっていない場合、これでOKなはずです。 - newcom pMoniker,,-1,Moniker.0 - - 何枚も繋がっている場合は、 - newcom pMoniker,,-1,Moniker.1 - newcom pMoniker,,-1,Moniker.2 - の様に替えてみてください。 - */ - - newcom pMoniker,,-1,Moniker.0 - newcom pSr - Moniker_BindToObject pMoniker,0,0,BaseFilter,pSr - - //これ以降使わないので、delcom します。 - ;delcom pMonike : delcom pClassEnum : delcom pCreateDevEnum - pMoniker=0 : pClassEnum=0 : pCreateDevEnum=0 - - Builder_AddFilter pGraphBuilder,pSr,"Video Capture" - - newcom pBuilder2,ICaptureGraphBuilder2 - - Builder2_SetFiltergraph pBuilder2,pGraphBuilder - - Builder2_RenderStream pBuilder2,PIN_PREVIEW,MEDIATYPE_Video,pSr,0,0 - - ;delcom pSr - pSr=0;ちょくと氏によればこれでもdelcomされるそうです。 - - querycom pMediaControl,pGraphBuilder,IMediaControl - //---↓ここから - querycom pVideoWindow, pGraphBuilder,IVideoWindow - - VideoWindow_put_Owner pVideoWindow,hwnd - - VideoWindow_put_WindowStyle pVideoWindow,WS_CHILD|WS_CLIPCHILDREN|WS_CLIPSIBLINGS - - VideoWindow_SetWindowPosition pVideoWindow,0,0,320,240 - - VideoWindow_put_Visible pVideoWindow,-1 - //---↑ここまでばっさり削除しても動作します(別ウインドウで開く) - - MediaControl_Run pMediaControl - - stop - - *exit - if vartype(pMediaControl)=6{MediaControl_Stop pMediaControl} - pVideoWindow=0 - pMediaControl=0 - pBuilder2=0 - pGraphBuilder=0 - end - }}} - * memo - 実はこのサンプル、TVも表示できるんです。~% - - 2006/02/07 07:05:50 JST~% - オートメージョン記述を止めました。 - 3.0でも動くはずです。 - - 2006/04/08 13:30:20 JST~% - 変更~% - onexit *exit -> onexit gosub *exit |