2017-11-15 79 views
0

最大6台のカメラから画像を収集しようとしています。私のコードは動作しますが、カメラのインデックスを切り替えてNewFrameイベントハンドラを個別に名前付きハンドラに設定して各カメラの画像をピクチャボックスに配置する必要があるため、オブジェクト指向ではないようです。これを行うより良い方法はありますか(下記のコードを参照)。画像をキャプチャするために複数のカメラを設定する

private void ImageCollector_Load(object sender, EventArgs e) 
    { 
     webcams = new FilterInfoCollection(FilterCategory.VideoInputDevice); 

     Cameras = new VideoCaptureDevice[webcams.Count]; 
     int index = 0; 
     foreach (FilterInfo CaptureDevice in webcams) 
     { 
      // Enable the cameras display 
      ViewLabelflowLayoutPanel.Controls[index].Visible = true; 
      ImageLabelflowLayoutPanel.Controls[index].Visible = true; 
      ViewflowLayoutPanel.Controls[index].Visible = true; 
      ImageflowLayoutPanel.Controls[index].Visible = true; 
      CameracomboBox.Items.Add(CaptureDevice.Name); 
      try 
      { 
       Cameras[index] = new VideoCaptureDevice(webcams[index].MonikerString); 
       switch (index) 
       { 
        case 0: 
         Cameras[index].NewFrame += new NewFrameEventHandler(cam1_NewFrame); 
         break; 

        case 1: 
         Cameras[index].NewFrame += new NewFrameEventHandler(cam2_NewFrame); 
         break; 

        case 2: 
         Cameras[index].NewFrame += new NewFrameEventHandler(cam3_NewFrame); 
         break; 

        case 3: 
         Cameras[index].NewFrame += new NewFrameEventHandler(cam4_NewFrame); 
         break; 

        case 4: 
         Cameras[index].NewFrame += new NewFrameEventHandler(cam5_NewFrame); 
         break; 

        case 5: 
         Cameras[index].NewFrame += new NewFrameEventHandler(cam6_NewFrame); 
         break; 
       }//endswitch 

       Cameras[index].Start(); 
      }//endtry 
      catch (Exception ex) 
      { 
       MessageBox.Show(ex.Message, "Error"); 
      }//endcatch 
     }//endforeach 
     CameracomboBox.SelectedIndex = 0; 
     index++; 
    }//endImageCollector_Load 

おかげ

答えて

0

良いあなたのために、あなたはコードのにおいを識別することができます!

NewFrameの仕組みはわかりませんが、イベントを発生させたカメラの送信者がいる可能性があります。

foreach (FilterInfo CaptureDevice in webcams) 
    { 
     // Enable the cameras display 
     ViewLabelflowLayoutPanel.Controls[index].Visible = true; 
     ImageLabelflowLayoutPanel.Controls[index].Visible = true; 
     ViewflowLayoutPanel.Controls[index].Visible = true; 
     ImageflowLayoutPanel.Controls[index].Visible = true; 
     CameracomboBox.Items.Add(CaptureDevice.Name); 
     try 
     { 
      Cameras[index] = new VideoCaptureDevice(webcams[index].MonikerString); 
      Cameras[index].NewFrame += new NewFrameEventHandler(cam_NewFrame); 


      Cameras[index].Start(); 
     }//endtry 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message, "Error"); 
     }//endcatch 
    }//endforeach 
    CameracomboBox.SelectedIndex = 0; 
    index++; 


public void cam_NewFrame(object sender, EventArgs e){ 

    VideoCaptureDevice cam = sender as VideoCaptureDevice; 
    //do what you need to do with cam here. 

} 

これは、送信者がカメラオブジェクトに設定されていることを前提としています。

関連する問題