2012-04-04 2 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이 아닌지 확인했습니다. 또한 null이 아닌 0x0 크기의 이미지를 확인했습니다.

내가 잘못 했습니까? 누구든지 해결 방법을 제안 할 수 있습니까?

+1

예외의 메시지는 무엇입니까? –

+1

@DavidNelson 좋은 질문입니다 : "매개 변수가 유효하지 않습니다." –

+0

너가 그것을 설정할 때 eventArgs.Frame의 높이와 너비 란 무엇입니까? –

답변

5

나는 당신이 이벤트 처리기에서 전달 된 비트 맵 (프레임) 복사본을 만들지 않는다고 생각합니다.

AForge 문서는 말한다 : 비디오 소스가 여러 클라이언트가있을 수 있기 때문에 비디오 소스 가 자신의 원본을 처분하기 때문에

, 각 클라이언트가 전달 된 비디오 프레임의 카피 (복제)을 만들기위한 책임 고객에게 알린 후 복사하십시오. 직접 그림 상자 에 프레임을 할당하는 경우

그래서, 비트 맵은 비트 맵을 그릴하려고하는 PictureBox 동안 AForge 프레임 워크에 배치 될 수있다.

+0

그게 승자입니다. 그 의도는 나중에 그만 두지 말고 즉시 그려야한다는 것입니다. 나중에 비디오가 재생되지 않습니다. –

+0

그 트릭을했다 - 감사합니다. –

관련 문제