技術的な資料 - 1

CamCapt-Interval の開発ツール

  • Visual Studio 2008 で、プログラム本体の開発には C# を利用しました。
  • ビデオキャプチャを行うために DirectShow を利用する必要がありましたが、C# からの直接利用が困難なため、必要な機能を C++ で DLL 化しました。
  • インストール先フォルダに配置されるのは、以下の三つのファイルだけです。
    1. CamCapt-Interval.exe
    2. DShow_Capture.dll
    3. α9000.wav (自作のシャッター音 : 懐かしい一眼レフカメラ MINOLTA α-9000 のシャッター音を録音)
       α-9000 の単3乾電池を交換してみると、故障もなく懐かしい本物のシャッター音が心地良く響いた。録音してみると意外といい音だ(^v^)。
 

技術的な資料 - 2

DShow_Capture.DLL の機能を公開

  • WebCam の映像を手軽に自作のアプリケーションに組み込めるよう、仕様を公開します。
  • この DLL を利用して生じた障害に対し、作者は一切の責任を負わないことを条件に、商用、非商用に関わらず無償でご利用ください。
  • DLL を利用することによって、DirectShow を利用するための煩わしいコンパイル環境を整える必要がありません。
 

技術的な資料 - 3

Visual Studio 2008 による DShow_Capture.DLL の利用手順の例

  1. 「ファイル(F)」、「新規作成(N)」、「プロジェクト(P)...」で、Windows フォームアプリケーションの WebCamSample を作成します。
    Visual Studio 2008 で新規のプロジェクトを作成する様子
     
  2. 「ビルド(B)」、「バッチビルド(T)...」で、Debug と Release にチェックし、一度ビルドします。
    バッチビルドのダイアログ画面
     
  3. ソリューションエクスプローラで右クリックし、「追加(D)」、「既存の項目(G)...」で、DShow_Capture.DLL を追加します。
    この状態をエクスプローラでプロジェクトのフォルダを確認すると、以下のように追加されています。
    プロジェクトに DShow_Capture.DLL が追加された様子
     
  4. 実行プログラムと同じフォルダに DShow_Capture.DLL を置くため、bin\Debug と bin\Release に手動でコピーしておきます。
     
  5. ソリューションエクスプローラで右クリックし、「追加(D)」、「新しい項目(N)...」で、DShow_Capture クラスを追加します。
    プロジェクトに「新しい項目を追加」する様子
     
  6. 追加した DShow_Capture.cs を開き、using ディレクティブを一行追加し、クラスの中身も追加します。

    using System;

    using System.Collections.Generic;

    using System.Text;

     

    // 追加

    using System.Runtime.InteropServices;

     

    namespace WebCamSample

    {

        class DShow_Capture

        {

            [DllImport("DShow_Capture.dll")]

            public static extern int GetDeviceList(string filename, int mode);

            [DllImport("DShow_Capture.dll")]

            public static extern int CaptureGraphBulder(int selectindex, IntPtr HWnd1, IntPtr HWnd2);

            [DllImport("DShow_Capture.dll")]

            public static extern void BitmapFileWrite(string filename);

            [DllImport("DShow_Capture.dll")]

            public static extern void SetDisplay_Size(int percent);

            [DllImport("DShow_Capture.dll")]

            public static extern bool MediaControl_Run();

            [DllImport("DShow_Capture.dll")]

            public static extern bool MediaControl_Stop();

            [DllImport("DShow_Capture.dll")]

            public static extern bool MediaControl_Pause();

            [DllImport("DShow_Capture.dll")]

            public static extern bool MediaControl_StopWhenReady();

            [DllImport("DShow_Capture.dll")]

            public static extern int MediaControl_GetState();

            [DllImport("DShow_Capture.dll")]

            public static extern void AllDataClear();

            [DllImport("DShow_Capture.dll")]

            public static extern void COMUninitialize();

            [DllImport("DShow_Capture.dll")]

            public static extern void FilterPropertyPage(IntPtr HWnd);

            [DllImport("DShow_Capture.dll")]

            public static extern void PinPropertyPage(IntPtr HWnd1, IntPtr HWnd2);

            [DllImport("DShow_Capture.dll")]

            public static extern int GetMedia_Width();

            [DllImport("DShow_Capture.dll")]

            public static extern int GetMedia_Height();

            [DllImport("DShow_Capture.dll")]

            public static extern int StartCameraDevice(int selectindex, IntPtr HWnd1, IntPtr HWnd2, int x, int y);

            [DllImport("DShow_Capture.dll")]

            public static extern int FullScreenMode(int mode);

            [DllImport("DShow_Capture.dll")]

            public static extern int GetIsFullScreen();

        }

    }

     
      
  7. これで DShow_Capture.DLL を利用する準備が整いました。
    サンプルプロジェクト "WebCamSample.zip" を参考にご利用ください。
    DLL に含まれる関数の利用方法については、プロジェクト内の "リファレンス.txt" に記載しています。
     
  8. 作成したアプリケーションを開発環境以外で動かすには、C++ を利用するため以下のコンポーネントが必要です。
    Microsoft Visual C++ 2008 SP1 再頒布可能パッケージ (x86)
 
 
inserted by FC2 system