2012-12-06 14 views
0

나는 Simple C# Wrapper for the AviFile Library을 사용 중이며 코드 조각은 here이며 Kinect의 색상 프레임에서 avi 파일을 생성합니다. "AVIFileOpen에서 예외 : -2147205009은"비트 맵에서 avi 예외

와 나는이 예외를 얻을 "_firstBitmap는"

Bitmap ImageToBitmap(ColorImageFrame Image) 
{ 
    byte[] pixeldata = new byte[Image.PixelDataLength]; 
    Image.CopyPixelDataTo(pixeldata); 
    Bitmap bmap = new Bitmap(Image.Width, Image.Height, PixelFormat.Format32bppRgb); 
    BitmapData bmapdata = bmap.LockBits(
     new Rectangle(0, 0, Image.Width, Image.Height), 
     ImageLockMode.WriteOnly, 
     bmap.PixelFormat); 
    IntPtr ptr = bmapdata.Scan0; 
    Marshal.Copy(pixeldata, 0, ptr, Image.PixelDataLength); 
    bmap.UnlockBits(bmapdata); 
    return bmap; 
} 

위에서 언급 한 function 그리고 컬러 프레임 이미지 생성됩니다

 aviManager = new AviManager(@"C:\temp\temp.avi", false); 
     aviStream = aviManager.AddVideoStream(false, 30, _firstBitmap); 

입니다 Kinect SDK의 ColorFrameReady 대리인에서 제공

private void SensorColorFrameReady(object sender, ColorImageFrameReadyEventArgs e) 
{ 
    using (ColorImageFrame colorFrame = e.OpenColorImageFrame()) 
    { 
     if (colorFrame != null) 
     { 
      // Copy the pixel data from the image to a temporary array 
      colorFrame.CopyPixelDataTo(this.colorPixels); 

      // Write the pixel data into our bitmap 
      this.colorBitmap.WritePixels(
       new Int32Rect(0, 0, this.colorBitmap.PixelWidth, this.colorBitmap.PixelHeight), 
       this.colorPixels, 
       this.colorBitmap.PixelWidth * sizeof(int), 
       0); 
      AviManager aviManager = new AviManager(@"C:\temp\temp.avi", false); 
      VideoStream aviStream = aviManager.AddVideoStream(false, 30, bmp); 

      Bitmap bitmap = ImageToBitmap(colorFrame); 
      aviStream.AddFrame(bitmap); 
      bitmap.Dispose(); 
      aviManager.Close(); 
     } 
    } 
} 

고마워요!

+0

'_firstBitmap'이란 무엇입니까? 모든 변수를 초기화하고 선언하는 코드를 포함하십시오. –

+0

_firstBitmap은 System.Drawing.Bitmap이며 위 링크에서 언급 한 ImageToBitmap 함수의 결과입니다. –

+1

오류는'AVIERR_FILEOPEN'입니다. 왜이 오류가 발생했는지 알기 위해서는'AVIFileOpen' 인수를 봐야합니다. –

답변

1

프레임 워크 AForge.NET 프레임 워크는 AVI 또는 다른 비디오 파일을 쉽게 쓸 수있는 몇 가지 기능을 제공합니다. 또한 Kinect에 direct support을 제공하므로 비디오 카메라에 액세스 할 수 있습니다.

그러나 웹 사이트의 정보 당 libfreenect이 필요합니다. libfreenect과 사무실 Kinect SDK가 같은 응용 프로그램에서 서로 조화롭게 살아갈 수 있는지 알지 못합니다.

AVIWriter class은 꽤나 간단하며 AForge.NET의 Kinect 액세스를 반드시 사용해야하는 것은 아닙니다. 공식 Kinect SDK에서 최신 색상 프레임을 쉽게 얻고 Bitmap으로 변환하여 출력 할 수 있습니다.

+0

Aforge AVI 기록기와 "AviFile Library의 단순 C# 래퍼"는 둘 다 동일한 obselete 창 AVI 라이브러리를 래핑하는 경우 어떤 차이가 있습니까? –