2016-04-27 13 views
1

質問があります。私のウェブカメラからのストリームをWPFの画像コンテナにどのように表示できますか?私はすでにEmguでストリームを取得し、それをBitmapSourceに変換しましたが、現在、WebカメラからWPF、Caliburn(MVVM)、すべてのXミリ秒でImageをバインドする方法を理解できません....私のウェブカメラからのビデオストリームをWPFで表示しますか?

答えて

1

[OK]をソリューションが見つかりました。 私はコード全体を表示することはできませんが、私は少し説明することができ、WPFビューをバインドする:

<Image x:Name="ImageWebcam" /> 

私のViewModelに私がしなければならない(カリバーンフレームワークを使用したが、これは簡単にMVVMパターンに適合させることができます)同じ名前を持つ関数で画像をバインドします

public WriteableBitmap ImageWebcam 
    { 
     get 
     { 
      return this.imageWebcam; 
     } 
     set 
     { 
      this.imageWebcam = value; 
      this.NotifyOfPropertyChange(() => this.ImageWebcam); 
     } 
    } 

をそして、私はViewModelにコンストラクタに初期化されなければならないタイマーを使用し、このイメージを更新するには:

public MachinBidule() 
{ 
    timeIsRunningOut= new System.Timers.Timer(); 
    timeIsRunningOut.AutoReset = true; 
    timeIsRunningOut.Interval = 10; 
    timeIsRunningOut.Elapsed += (sender, e) => { UpdateImage(); }; 
    capture = new Capture(); // Capture the webcam using EmguCV 
} 

そして今、あなたはディスパッチャを使用してアップデートを管理することができます

// Update the image, method called by the timer every 10 ms 
private void UpdateImage() 
{ 
    // If capture is working 
    if(capture.QueryFrame()!= null) 
    { 
     //capture an Image from webcam stream and 
     Image<Bgr, Byte> currentFrame = capture.QueryFrame().ToImage<Bgr, Byte>(); 
     if (currentFrame != null) 
     { 
      Application.Current.Dispatcher.BeginInvoke(new System.Action(() => { imageWebcam = new WriteableBitmap(BitmapSourceConvert.ToBitmapSource(currentFrame)); NotifyOfPropertyChange(() => ImageWebcam); })); 
     } 
    } 
} 

あなたは私たちがemguCV Image<Bgr,Byte>からWPF WriteableBitmapに変換し、NotifyOfPropertyChange(() => ImageWebcam)に更新を通知する必要があることに気づくことができます。

質問がある場合は、私に連絡するか、コメントしてください。 あなたが間違いを気付いたなら、私を訂正するのをためらってください(文法&コード)。

0

あなたがいないImage制御、映像を表示するためにMediaElementを使用する必要があります。

XAML:

<MediaElement Source="{Binding VideoAddress}" /> 

のViewModel:

private URI videoAddress=new URI("C:\video.wmv"); 
public URI VideoAddress 
{ 
    get { return videoAddress; } 
    set 
    { 
     videoAddress = value; 
     OnPropertyChanged("LeafName"); 
    } 
} 

また、WPF-MediaKitを使用すると、WebCamのビデオを表示できます。またはsee this tutorial

更新:

あなたは画像を表示するために、Imageを使用する必要があります。

<Image x:Name="imageWebcam" /> 

とC#:

BitmapImage logo = new BitmapImage(); 
logo.BeginInit(); 
logo.UriSource = new Uri("C:/1.png"); 
logo.EndInit(); 

imageWebcam.Source = logo; 
+0

EmguCVは「Bgrイメージフレーム」をキャプチャするので、実際にビデオとして使用できますか? –

+0

画像を表示するには、更新されたセクションを参照してください。 – StepUp

+0

@EstebanChamard質問はお気軽に。私の返事があなたに役立つと感じたら、私の返事を答えとしてマークして、将来の他の人の検索を簡単にすることができます。 http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-workをご覧ください。 – StepUp

0

は、あなたの画像要素のソースとしてWriteableBitmapを使用してください。ビューモデルで新しいフレームごとにフレームデータを渡すコールバックを提供する必要があります。このコールバックをコードビューで購読してください。各フレームをビットマップに書き込むことができます。私はデータバインディングがこの場合には良いアプローチだとは思わない。

はるかにWPFで最良の選択肢であるWriteableBitmapビデオ・フレームのストリームを扱う:

WriteableBitmap