2012-04-04 21 views
5

は、ビデオとイメージングもののためAForgeを試してみることにしたので、私はthis simple demoを実装しようとした:PictureBoxを更新するときに、何がArgumentExceptionを引き起こす可能性がありますか?

private void Main_Load(object sender, EventArgs e) 
{ 
     // enumerate video devices 
     FilterInfoCollection videoDevices = new FilterInfoCollection(
         FilterCategory.VideoInputDevice); 
     // create video source 
     VideoCaptureDevice videoSource = new VideoCaptureDevice(
         videoDevices[0].MonikerString); 
     // set NewFrame event handler 
     videoSource.NewFrame += new NewFrameEventHandler(video_NewFrame); 
     // start the video source 
     videoSource.Start(); 
} 

private void video_NewFrame(object sender, NewFrameEventArgs eventArgs) 
{ 
     this.pictureBox1.Image = eventArgs.Frame; 
} 

問題は、私はいつもArgumentExceptionを得ることである、しかし常にすぐに発生しません。それはApplication.Run(new Main());にポップアップしますが、スタックトレースの先頭には、次のようになります。

  • at System.Drawing.Image.get_Width() at System.Drawing.Image.get_Size()
  • at System.Windows.Forms.PictureBox.ImageRectangleFromSizeMode(PictureBoxSizeMode mode)
  • at System.Windows.Forms.PictureBox.OnPaint(PaintEventArgs pe)

これは関連性があるかどうかわからしかし、のParamName属性ではありません例外はnullです。私はtry ... catchブロックでイメージ割り当てをラップしようとしましたが、これは役に立たなかった。また、割り当て前に画像がヌルでないことを確認しました。私もnullではないが、0x0サイズの画像をチェックしました。

どうしたのですか?誰かが回避策を提案できますか?

+1

例外のメッセージは何ですか? –

+1

@DavidNelson良い質問:「パラメータが無効です。」 –

+0

設定すると、eventArgs.Frameの高さと幅はどのくらいですか? –

答えて

5

私は、あなたのイベントハンドラで渡されたビットマップ(フレーム)のコピー を作成しないことが問題だと思います。

AForgeドキュメントは言う:映像ソースが複数のクライアントを持っている可能性があるため、ビデオソース は、独自のオリジナルを配置するため

、各クライアントは、渡されたビデオフレームのコピー(クローン)を作成するための 責任がありますクライアントに通知した後にコピーする。あなたが直接ピクチャボックス にフレームを割り当てた場合

ので、ビットマップは、ビットマップを描画しようとしているPictureBox ながらAForgeフレームワークによって配置することができます。

+0

それは勝者です。その目的は、すぐにそれを描くことであり、後でそれを残すことではありません。後でビデオ再生はありません。 –

+0

それはトリックをしました - ありがとう。 –

関連する問題