2011年1月27日木曜日

[LabVIEW]NI-IMAQを使わないで動画再生&静止画キャプチャ その1

前回のエントリで、

> 『YOU、LabVIEWでDirectShow直接叩いチャイなYO!』

という電波を受信したので、色々調べて勉強がてらに、先ずは

・ DirectShowを使ってLabVIEWで動画再生

から作ってみることにしました。


 最初に、参考にさせていただいたWebページを以下に挙げておきます。
DirectShow(リンクはWikipedia該当項目)はCOMベースなので、
最初はActiveX使って叩こうとしたんですが、LabVIEWのActiveXで
インターフェイスの切り替え方が分からずに断念しました。

で、.NET使うんですが、なぜかDirectShowに.NETからアクセスするための
ライブラリがありません。のでオープンソースライブラリ「DirectShow.NET」を
インストールして使用します。


DirectShow.NET使って、指定した動画ファイルを再生するVI(スニペット)がコレ。
…ファイルから動画再生するだけだったらカンタンw
  1. コンストラクタで[FilterGraph]作って、 
  2. 再生したいファイルのパスを[IGraphBuilder.RenderFile()] に渡すと、
  3. 自動的にフィルタグラフが作成されるので、
  4. [IMediaControl]インターフェイスから.Run()すれば再生ウィンドウ(別ウィンドウで)が表示される。
  5. 再生中にVIが停止しないよう、whileループを回しておいて、
  6. [停止]ボタン押したら、[IMediaControl.Stop()]で再生停止させる。
実行中はこんな感じ。

再生が別ウィンドウってのもアレなので、フロントパネル内に表示させてみましょう。

さぁ、グっとヤヤこしくなってきましたw 要点は、
  1. フロントパネルにPictureBox .NETコンテナを置いて、
  2. [IVideoWindow]インターフェイスを使って、そのピクチャーボックスに表示させてる
ことです(ついでに表示サイズを実際の動画サイズに合わせています)。

今回はここまで。次回以降で、静止画キャプチャを実装します。

ちなみに、デモで使ってるイルカの動画は「GOM Player」のサンプル動画です。

~~ その2 へ続く ~~

0 件のコメント:

コメントを投稿