2013-04-20 12 views
0

List에서 avi 파일을 생성하기로되어있는 약간의 코드를 작성했습니다.AForge AVI Writer 예외

// instantiate AVI writer, use WMV3 codec 
     internal static AVIWriter writer = new AVIWriter("wmv3"); 
     private static List<Bitmap> imgList = new List<Bitmap>(); 

     internal static void SaveFile() 
     { 
      var list = imgList; 
      imgList = default(List<Bitmap>); 

      // create new AVI file and open it 
      writer.Open(@"d:\test.avi", 640, 480); 
      foreach (Bitmap b in list) 
      { 
       writer.AddFrame(b); 
      } 
      writer.Close(); 
     } 

Unfortubately, 나는 "(목록에서 비트 맵 B) foreach는" 에서 nullreference 예외를 얻고있다하지만 디버깅 및 writer.Close()에서 중단 점을 배치 할 때 ;,이 오류는 실제로 통과 후 트리거 그 중단 점.

그래서 저는 꽤 혼란 스럽습니다. 여기에 무슨 일이 일어나는지 아는 사람이 있습니까?

답변

0

프로그램에서 2 가지 다른 점에서 동일한 예외가 발생하는 이유를 정확히 알 수 없습니다. 내 생각 엔 관리되는 코드와 동기화되지 않는 네이티브 interop과 관련이 있다는 것입니다.

바이너리 대신 AForge 소스 코드를 참조 해 보았습니까? 이렇게하면 오류가 발생한 정확한 위치를 정확히 알려줍니다.

현재로서는 모든 null에 대한 비트 맵 목록을 확인하거나 최신 AForge (아마도 프레임 워크 버그)로 업데이트하는 것이 좋습니다. 나는 또한 두 가지 코덱을 시도해 보길 권한다.

+0

제안 해 주신 것에 대해 감사 드리며, 그들에게 기회를 드리겠습니다. – user2303251

+0

흠, 그리고 FFMPEG 라이브러리를 대신 사용하려고하면 ffmpeg와 관련된 코드가 액세스되기 전에 예외가 발생합니다 (imgList에 프레임을 배치하는 코드는 전혀 관련이 없습니다) – user2303251

+0

도지 AForge. 내 경험상 이런 점을 처리하는 것은 너무 불안정합니다. 대신 EmguCV에서 비디오 라이터 클래스를 사용해보십시오. 더 좋은 방법은 모든 비디오 프레임을 임시 디렉토리에 덤프하고 FFMpeg를 직접 명령 줄 인수를 통해 호출하여 모든 인수를 결합하는 것입니다. – CMJ