C#で連続するBitmapをaviファイルにキャプチャする

chakemiです。 本日は、連続するBitmapをaviにキャプチャしてみたいと思います。

aviファイルを作成するには、Win32APIのVideo For Windows(vfw)を使ったり、DirectShowを使うことになるかと思いますが、どちらもC#で利用しようと思うと、プラットフォーム呼び出し(PInvoke)やラッパーDLLファイルを作成することになると思います。

今回は自分で作るには時間が無かったので、本日は便利なライブラリの紹介です。 AForge.NET Framework

AForge.NET Frameworkはコンピュータビジョンや人工知能の分野の開発者や研究者のために設計されたライブラリです。 今回はこちらで作られたVFWのラッパークラスを利用させて頂きます。

こちらから最新のAForge.NET Framework2.2.3をダウンロードします。 ※自分は、zipファイルをダウンロードしました。 zipファイルを展開すると、Releaseフォルダの中に「AForge.Video.VFW.dll」があります。今回はこれを使用します。

開発環境

  • WindowsXP SP3
  • VisualC#2010Express

ソリューションエクスプローラーの参照設定に先ほどの「AForge.Video.VFW.dll」を追加します。

usingディレクティブを追加します。

1
using AForge.Video.VFW;

AVIWriterオブジェクトを生成します。

1
AVIWriter aviWriter = new AVIWriter();

この際、引数にcodecを指定出来ますが、今回は非圧縮で。 Openメソッドで保存するファイル名、画面サイズを指定し、aviファイルストリームを生成します。

1
aviWriter.Open(@"C:\test1.avi", 1024, 768);

AddFrameメソッドでBitmapオブジェクトをストリームに書き込んでいきます。 必要な回数AddFrame()で処理します。

1
aviWriter.AddFrame(bmp);

最後に、Closeメソッドでストリームを閉じて終了。

1
aviWriter.Close();

前回作成したデスクトップチャプチャ画像をループでaviファイルに書き出してみました。

こんな感じで出来上がり♪

Comments