2

私は高解像度カメラをfirewire経由で接続しています。SDKを使用すると、フレームをバイトバッファに取り込むことができます。例えば:

unsigned char *buffer = new unsigned char[size];
GetFrameBuffer(cameraHandle, buffer);

APIの性質上、ライブビューを表示するには、フレームを継続的に取得する必要があります(20 fps以上)。ここで、これをWPFUIに表示します。私はいくつかのアプローチを考えることができますが、どの方法を選択するかを決めるのに助けが必要です!

アイデア

  1. 相互運用機能を介して更新されたプロパティを介してSourceImage要素のを継続的に更新します。
  2. HwndHostでカスタムHWNDベースのコントロールをホストします。メッセージポンプがアイドル状態になると、画像が更新されます。
  3. DirectShowでソースフィルターを記述し、ある種のタイミングロジックを使用して、バッファーを継続的に読み取ります。これにより、 MediaElementを使用してライブビューを表示できるようになります。

もちろん、CPUの負荷を最小限に抑えたいと思います。

質問はこれに要約されます:

WPFで、FireWire接続からのライブストリームを次のようなプリミティブAPIで表示するにはどうすればGetFrameBufferよいですか?

4

1 に答える 1

0

最も簡単な方法は最初の方法だと思います。画像ソースを更新するだけです。表示したいだけの場合は、directshowフィルターは必要ありません。ただし、それもキャプチャしたい場合は、DirectShowフィルターが最適な方法です。

画像ソースの更新は簡単な作業です。この良い例は、.net用のMjpegデコーダーです。Mjpegリーダー/パーサーを独自のグラバーロジックに置き換える必要があります。

于 2013-03-19T07:49:07.890 に答える