在C#Win Forms应用程序中播放原始视频帧

时间:2017-03-25 11:33:59

标签: c# winforms rgb directshow video-processing

如何从原始视频数据(以.rgb或.raw)播放和保存选定的原始视频帧。

原始未压缩视频数据为320 x 240灰度格式,1字节/像素,仅30 fps。

但是如何在30 FPS中查看多个帧? 我可以使用DirectShow或类似的API吗?什么是开始的最佳资源?我看了FFPMEG,但我想避免显示压缩帧,因为它是用于科学应用。

到目前为止,我已经能够使用Picture Box控件在C#.NET for Win Forms中使用此代码从原始视频数据(在.rgb中)中查看一个帧。 但不确定如何做多个帧并且可能有寻求控制。

byte[] imageData = File.ReadAllBytes("output.rgb");
        Console.WriteLine("imageDataLen=" + imageData.Length);
        int width = 320;
        int height = 240;

        var bmp = new Bitmap(width, height, PixelFormat.Format8bppIndexed);
        //bmp = (Bitmap) ConvertToGrayScale(bmp);
        ColorPalette pal = bmp.Palette;
        for (int i = 0; i <= 255; i++)
        {
            // create greyscale color table
            pal.Entries[i] = Color.FromArgb(i, i, i);
        }
        bmp.Palette = pal;
        BitmapData bmpData = bmp.LockBits(new Rectangle(0, 0,
                                                        bmp.Width,
                                                        bmp.Height),
                                                        ImageLockMode.WriteOnly,
                                                        bmp.PixelFormat);
        Marshal.Copy(imageData, 0, bmpData.Scan0, width * height);
        bmp.UnlockBits(bmpData);
        pictureBox1.SizeMode = PictureBoxSizeMode.AutoSize;
        pictureBox1.Image = bmp;

0 个答案:

没有答案