位图到avi异常

时间:2012-12-06 10:23:15

标签: kinect avi kinect-sdk vfw

我正在使用Simple C# Wrapper for the AviFile Library和我找到here的代码段,以便从Kinect的彩色框架创建一个avi文件。

我得到了这个例外:“AVIFileOpen中的异常:-2147205009”

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

使用上面提到的function生成“_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;
 }

Color框架图像由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();
        }
    }
}

谢谢!

1 个答案:

答案 0 :(得分:1)

AForge.NET框架提供了多种功能,可让您轻松编写AVI或其他视频文件。它还为Kinect提供direct support,允许您访问摄像机。

但是,根据网站上的信息,它需要libfreenect。我不知道libfreenect和办公室Kinect SDK是否可以在同一个应用程序中相互协调。

AVIWriter class非常简单,并不一定要求您使用AForge.NET的Kinect访问权限。您可以轻松地从官方Kinect SDK获取最新的颜色框架,将其转换为Bitmap并输出。