DirectShow ビデオ入力コンポーネント
Namespace: FVIL.DSAssembly: FVILforms (in FVILforms.dll) Version: 3.1.0.0 (3.1.0.9)
Syntax
C# |
---|
[SerializableAttribute] public class CFviGrabberUI : Component |
Visual Basic |
---|
<SerializableAttribute> Public Class CFviGrabberUI Inherits Component |
Remarks
DirectShow 対応ビデオ入力クラスとそのパラメータのオブジェクトをまとめて管理するコンポーネントです。
このコンポーネントは自身の生成時に、DirectShow 対応カメラの設定・取り込みに必要なクラスのオブジェクトを生成し、
プロパティからのアクセスを提供します。
プロパティで操作できるオブジェクトについては該当クラスの説明をご参照ください。
このコンポーネントをフォームのクライアント領域の任意の位置にドロップ(下図(1))してください。 ドロップすると下図(2)のようにアイコンが作成されます。
ツールボックス項目:
WIL 3.0 と WIL 3.1 のコンポーネントを同時に表示することができません。 プロジェクトが参照する FVIL バージョンに合わせてツールボックス項目のバージョンを切り替える必要があります。 詳しくは、このマニュアルの メインページ/過去のバージョンとの互換性/ツールボックス項目の切り替え をご参照ください。
イベントハンドラの登録:
下図のように FrameValid イベントにイベントハンドラを登録すると カメラが画像を取り込んだことを通知するイベントを受け取ることができます。 作成されたアイコンを選択し、プロパティウィンドウでイベントハンドラを登録できます。
Examples
ソースコード:
ソースコード:
下記のサンプルコードは、初期化、カメラ選択、画像表示の流れを最も単純に行う方法を示します。
- 画像取り込みバッファを設定します。
- カメラを選択します。
- 画像取り込み完了イベントを受け取り画像ビューに表示します。
C# | Copy |
---|---|
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace User.SampleCode.DS { public partial class CFviGrabberUI_SimpleForm : Form { public CFviGrabberUI_SimpleForm() { InitializeComponent(); } /// <summary> /// フォーム初期化 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void OnFormLoad(object sender, EventArgs e) { // 画像取り込みバッファの設定. for(int i=0 ; i<5 ; i++) cFviGrabberUI1.Controller.Images.Add(new FVIL.Data.CFviImage()); } /// <summary> /// ボタンが押されたとき /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void toolStripButton1_Click(object sender, EventArgs e) { // カメラ選択 if (cFviGrabberUI1.OpenDialog() == DialogResult.OK) { // 画像取り込みバッファのサイズ調整. cFviGrabberUI1.Controller.Validate(); // 取り込み開始. cFviGrabberUI1.Controller.Run(); } } /// <summary> /// 画像取り込み完了イベント /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void cFviGrabberUI1_FrameValid(object sender, FVIL.DS.GrabberEventArgs e) { if (e.Status == FVIL.DS.GrabberEventStatus.Done) { cFviImageView1.Image = e.Image; cFviImageView1.Refresh(); } } } } |
Visual Basic | Copy |
---|---|
Imports System.Collections.Generic Imports System.ComponentModel Imports System.Data Imports System.Drawing Imports System.Text Imports System.Windows.Forms Namespace SampleCode.DS Public Partial Class CFviGrabberUI_SimpleForm Inherits Form Public Sub New() InitializeComponent() End Sub ''' <summary> ''' フォーム初期化 ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> Private Sub OnFormLoad(sender As Object, e As EventArgs) ' 画像取り込みバッファの設定. For i As Integer = 0 To 4 cFviGrabberUI1.Controller.Images.Add(New FVIL.Data.CFviImage()) Next End Sub ''' <summary> ''' ボタンが押されたとき ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> Private Sub toolStripButton1_Click(sender As Object, e As EventArgs) ' カメラ選択 If cFviGrabberUI1.OpenDialog() = DialogResult.OK Then ' 画像取り込みバッファのサイズ調整. cFviGrabberUI1.Controller.Validate() ' 取り込み開始. cFviGrabberUI1.Controller.Run() End If End Sub ''' <summary> ''' 画像取り込み完了イベント ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> Private Sub cFviGrabberUI1_FrameValid(sender As Object, e As FVIL.DS.GrabberEventArgs) If e.Status = FVIL.DS.GrabberEventStatus.Done Then cFviImageView1.Image = e.Image cFviImageView1.Refresh() End If End Sub End Class End Namespace |
ソースコード:
下記のサンプルコードは、デザイナを使用せず直接コーディングした場合を示します。
C# | Copy |
---|---|
using System; using System.Collections.Generic; using System.Text; using System.Drawing; using fvalgcli; using System.Windows.Forms; using FVIL.DS; namespace User.SampleCode { public partial class DS { [FvPluginExecute] public void GrabberUI_OpenDialog() { try { // 1) インスタンスの生成. FVIL.DS.CFviGrabberUI grabber = new FVIL.DS.CFviGrabberUI(); // 2) カメラ選択ダイアログの表示. grabber.OpenDialog(); // E) 確認. { // パラメータの取得. FVIL.DS.CFviGrabberParam param = grabber.Param; Console.WriteLine("FilterCategory : {0}", param.FilterCategory); Console.WriteLine("FilterFormatInfo : {0}", param.FilterFormatInfo); Console.WriteLine("FilterInfo : {0}", param.FilterInfo); Console.WriteLine("FilterPinInfo : {0}", param.FilterPinInfo); Console.WriteLine("RenderID : {0}", param.RenderID); Console.WriteLine("SampleFormatInfo : {0}", param.SampleFormatInfo); } // 3) 画像取り込み用バッファの設定. grabber.Controller.ImageType = FVIL.ImageType.RGB24; for( int index = 0; index < 3 ; index++) grabber.Controller.Images.Add(new FVIL.Data.CFviImage()); grabber.Controller.Validate(); // 4) 入力の開始. grabber.Controller.Run(); // 5) 1フレーム取り込み完了まで待機. if (!grabber.Controller.Wait(10000)) { Console.WriteLine("TimeOut"); } // 6) 入力の停止. grabber.Controller.Stop(); // E) 画像の保存. FVIL.File.Function.SaveImageFile(Defs.ResultDir + "/DS.GrabberUI_OpenDialog.bmp", grabber.Controller.LastImage); } catch (FVIL.DS.CFviExceptionDS ex) { Console.WriteLine("Message:{0}", ex.Message); Console.WriteLine("DSMessage:{0}", CFviExceptionDS.GetDirectShowMessage(ex.ComError)); } catch (FVIL.CFviException ex) { Console.WriteLine("--Function = {0} ErrorCode = {1}", ex.Function, ex.ErrorCode); Console.WriteLine("--Message:{0}", ex.Message); } catch (System.Exception ex) { Console.WriteLine("--Message:{0}", ex.Message); } } } } |
Visual Basic | Copy |
---|---|
Imports System.Collections.Generic Imports System.Text Imports System.Drawing Imports fvalgcli Imports System.Windows.Forms Imports FVIL.DS Namespace SampleCode Public Partial Class DS <FvPluginExecute> _ Public Sub GrabberUI_OpenDialog() Try ' 1) インスタンスの生成. Dim grabber As New FVIL.DS.CFviGrabberUI() ' 2) カメラ選択ダイアログの表示. grabber.OpenDialog() ' E) 確認. If True Then ' パラメータの取得. Dim param As FVIL.DS.CFviGrabberParam = grabber.Param Console.WriteLine("FilterCategory" & vbTab & ": {0}", param.FilterCategory) Console.WriteLine("FilterFormatInfo : {0}", param.FilterFormatInfo) Console.WriteLine("FilterInfo" & vbTab & vbTab & ": {0}", param.FilterInfo) Console.WriteLine("FilterPinInfo" & vbTab & ": {0}", param.FilterPinInfo) Console.WriteLine("RenderID" & vbTab & vbTab & vbTab & ": {0}", param.RenderID) Console.WriteLine("SampleFormatInfo : {0}", param.SampleFormatInfo) End If ' 3) 画像取り込み用バッファの設定. grabber.Controller.ImageType = FVIL.ImageType.RGB24 For index As Integer = 0 To 2 grabber.Controller.Images.Add(New FVIL.Data.CFviImage()) Next grabber.Controller.Validate() ' 4) 入力の開始. grabber.Controller.Run() ' 5) 1フレーム取り込み完了まで待機. If Not grabber.Controller.Wait(10000) Then Console.WriteLine("TimeOut") End If ' 6) 入力の停止. grabber.Controller.[Stop]() ' E) 画像の保存. FVIL.File.[Function].SaveImageFile(Defs.ResultDir & "/DS.GrabberUI_OpenDialog.bmp", grabber.Controller.LastImage) Catch ex As FVIL.DS.CFviExceptionDS Console.WriteLine("Message:{0}", ex.Message) Console.WriteLine("DSMessage:{0}", CFviExceptionDS.GetDirectShowMessage(ex.ComError)) Catch ex As FVIL.CFviException Console.WriteLine("--Function = {0} ErrorCode = {1}", ex.[Function], ex.ErrorCode) Console.WriteLine("--Message:{0}", ex.Message) Catch ex As System.Exception Console.WriteLine("--Message:{0}", ex.Message) End Try End Sub End Class End Namespace |
Inheritance Hierarchy
System..::..Object
System..::..MarshalByRefObject
System.ComponentModel..::..Component
FVIL.DS..::..CFviGrabberUI
System..::..MarshalByRefObject
System.ComponentModel..::..Component
FVIL.DS..::..CFviGrabberUI