DirectShow ビデオ入力クラス

Namespace: FVIL.DS
Assembly: FVILforms (in FVILforms.dll) Version: 3.1.0.0 (3.1.0.9)

Syntax

C#
public class CFviGrabber : CFviGraph, 
	ISampleGrabberCB
Visual Basic
Public Class CFviGrabber
	Inherits CFviGraph
	Implements ISampleGrabberCB

Remarks

DirectShow 対応カメラからの画像取り込みを行う為のクラスです。
このクラスの内部では、下記の2つのインターフェースを組み合わせて画像の取り込みを行っています。

インターフェイス説明サイト (2010年12月 現在)
IBaseFilterソースフィルタの操作を行います。http://msdn.microsoft.com/ja-jp/library/cc355443.aspx
ISampleGrabberソースフィルタから流れる映像を取得します。http://msdn.microsoft.com/ja-jp/library/cc369550.aspx

初期値と範囲:
プロパティ初期値範囲説明
ImagesCapacity = 0, Count = 0Capacity = 1~, Count = 1~Capacity画像取り込み用バッファ配列
LastImagenullCFviImageのインスタンス最後に取り込まれた画像
LastImageIndex-10~Count-1画像取り込み用バッファ配列の指標
ImageSizeWidth=0, Height=0Width=1~, Height=1~画像サイズ
BppIn24FilterFormatInfo.MediaSubType と一致していること。ピクセルサイズ (入力側)
ImageTypeRGB24DIB を使用する場合はUC8, RGB24, RGB32のいずれか。DIB を使用しない場合は BppIn とサイズを合わせること。 出力側の画像種別
UseDIBtruetrue/falseDIB 使用の有無
FreerunModetruetrue/falseフリーランモード

Examples

ソースコード:
C# Copy imageCopy
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
    {
        /// <summary>
        /// ビデオ入力クラス.
        /// </summary>
        [FvPluginExecute]
        public void Grabber()
        {
            try
            {
                // 1) インスタンスの生成.
                FVIL.DS.CFviGrabber controller = new FVIL.DS.CFviGrabber();

                // 2) カメラ選択ダイアログの表示とパラメータの取得.
                FVIL.DS.SelectCameraForm form = new SelectCameraForm();
                form.ShowDialog();
                FVIL.DS.CFviGrabberParam param = form.GetParam();

                // 3) グラフの生成.
                controller.Create(param);

                // 3) 画像取り込み用バッファの設定.
                controller.ImageType = FVIL.ImageType.RGB24;
                for (int index = 0; index < 3; index++)
                    controller.Images.Add(new FVIL.Data.CFviImage());

                controller.Validate();

                // 4) 入力の開始.
                controller.Run();

                // 5) 1フレーム取り込み完了まで待機.
                if (!controller.Wait(10000))
                {
                    Console.WriteLine("TimeOut");
                }

                // 6) 入力の停止.
                controller.Stop();

                // E) 画像の保存
                FVIL.File.Function.SaveImageFile(Defs.ResultDir + "/DS.Grabber_OpenDialog.bmp", 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 imageCopy
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
        ''' <summary>
        ''' ビデオ入力クラス.
        ''' </summary>
        <FvPluginExecute> _
        Public Sub Grabber()
            Try
                ' 1) インスタンスの生成.
                Dim controller As New FVIL.DS.CFviGrabber()

                ' 2) カメラ選択ダイアログの表示とパラメータの取得.
                Dim form As FVIL.DS.SelectCameraForm = New SelectCameraForm()
                form.ShowDialog()
                Dim param As FVIL.DS.CFviGrabberParam = form.GetParam()

                ' 3) グラフの生成.
                controller.Create(param)

                ' 3) 画像取り込み用バッファの設定.
                controller.ImageType = FVIL.ImageType.RGB24
                For index As Integer = 0 To 2
                    controller.Images.Add(New FVIL.Data.CFviImage())
                Next

                controller.Validate()

                ' 4) 入力の開始.
                controller.Run()

                ' 5) 1フレーム取り込み完了まで待機.
                If Not controller.Wait(10000) Then
                    Console.WriteLine("TimeOut")
                End If

                ' 6) 入力の停止.
                controller.[Stop]()

                ' E) 画像の保存
                FVIL.File.[Function].SaveImageFile(Defs.ResultDir & "/DS.Grabber_OpenDialog.bmp", 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
FVIL.DS..::..CFviGraph
FVIL.DS..::..CFviGrabber

See Also