0

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

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

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

上面提到的函数生成“_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;
 }

并且颜色帧图像由 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();
        }
    }
}

谢谢 !

4

1 回答 1

1

AForge.NET框架提供了多种功能,使您可以轻松编写 AVI 或其他视频文件。它还为 Kinect 提供直接支持,让您可以访问摄像机。

但是,根据网站上的信息,它需要libfreenect. 我不知道libfreenectOffice Kinect SDK 是否可以在同一个应用程序中和谐相处。

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

于 2012-12-06T20:15:24.237 回答