2012-04-04 10 views
5

video ve görüntüleme şeyler AForge denemeye karar verdikten sonra, ben this simple demo uygulamaya çalışmıştır:Bir PictureBox'u güncellerken ArgumentException neden olabilir?

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; 
} 

sorun hep bir ArgumentException olsun yani, gerçi her zaman hemen gerçekleşmez. Bu Application.Run(new Main()); tarafında açılan, ancak stacktrace üst şuna benzer:

  • 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)

bu alakalı olup olmadığından emin, ama ParamName nitelik değil istisna null. Görüntü atamalarını bir try ... catch bloğunda sarmalamayı denedim, ancak bu yardımcı olmadı. Ayrıca, görüntünün atanmadan önce null olmadığından emin olmak için kontrol ettim. Ayrıca null olmayan, ancak 0x0 boyutlu görüntüler için kontrol ettik.

Neyi yanlış yaptım? Birisi geçici bir çözüm önerebilir mi?

+1

İstisnadaki mesaj nedir? –

+1

@DavidNelson iyi soru: "Parametre geçerli değil." –

+0

Bunu ayarladığınızda eventArgs.Frame Yüksekliği ve Genişliği nedir? –

cevap

5

Sorun, olay işleyicinizde geçen bit eşlemin (çerçeve) bir kopyasını yapmamanız olduğunu düşünüyorum.

AForge dokümantasyon diyor: video kaynağı birden fazla müşteri olabileceğinden video kaynağı kendi orijinal elden çünkü

, her istemci, geçirilen bir video çerçevesinin bir kopyasını (klonlama) yapmak için sorumludur Müşterileri bilgilendirdikten sonra kopyalayın. doğrudan resim kutusuna için çerçeveyi atarsanız

Yani, bitmap bit eşlem çizmek çalışıyor PictureBox ise AForge framework tarafından bertaraf edilebilir.

+0

Bu bir kazanan. Amaç, hemen çekip, daha sonra bırakmak için değil. Daha sonra video oynatmada yoktur. –

+0

Bu hile yaptı - teşekkürler. –

İlgili konular