Исключение растрового изображения в avi

Я использую Simple C# Wrapper для библиотеку AviFile и фрагмент кода, который я нашел здесь для создания avi-файл из цветных рамок Kinect.

И я получаю это исключение: «Исключение в 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;
 }

Изображение с цветной рамкой предоставляется делегатом ColorFrameReady из Kinect SDK.

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();
        }
    }
}

Спасибо !


person Uri Goren    schedule 06.12.2012    source источник
comment
Как определяется _firstBitmap? Пожалуйста, включите код, который инициализирует и объявляет все переменные.   -  person Nicholas Pappas    schedule 06.12.2012
comment
_firstBitmap — это System.Drawing.Bitmap, и он является результатом функции ImageToBitmap, упомянутой в ссылке выше.   -  person Uri Goren    schedule 09.12.2012
comment
Ошибка AVIERR_FILEOPEN, вам нужно просмотреть аргументы AVIFileOpen, чтобы понять, почему вы столкнулись с этой ошибкой.   -  person Roman R.    schedule 21.12.2012


Ответы (1)


Платформа AForge.NET предоставляет несколько функций, которые позволяют легко записывать AVI или другие видеофайлы. Он также предоставляет прямую поддержку для Kinect, позволяющий получить доступ к видеокамере.

Однако, согласно информации на веб-сайте, для этого требуется libfreenect. Я не знаю, могут ли libfreenect и Office Kinect SDK гармонично сосуществовать друг с другом в одном приложении.

Класс AVIWriter довольно прост и не обязательно требует использования AForge. NET доступ к Kinect. С таким же успехом вы можете получить самую последнюю цветовую рамку из официального Kinect SDK, преобразовать ее в Bitmap и вывести.

person Nicholas Pappas    schedule 06.12.2012
comment
В чем разница между Aforge AVI Writer и Simple C# Wrapper для библиотеки AviFile, если они оба обертывают одну и ту же устаревшую библиотеку Windows AVI? - person Uri Goren; 09.12.2012