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

在C#Win Forms应用程序中播放原始视频帧,c#,winforms,rgb,directshow,video-processing,C#,Winforms,Rgb,Directshow,Video Processing,如何从原始视频数据(in.rgb或.raw)播放和保存选定的原始视频帧 原始未压缩视频数据为320 x 240灰度格式,每像素1字节,每秒仅30帧 但是我如何以30 FPS的速度查看多个帧呢? 我可以使用DirectShow或类似的API吗?什么是开始工作的最佳资源?我看了FFPMEG,但我想避免显示压缩帧,因为这是为了科学应用 到目前为止,我已经能够从原始视频数据(in.rgb)中查看一帧,使用C#.NET for Win Forms中的这段代码,使用图片框控件。 但不知道如何做多帧,也许有一

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

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

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

到目前为止,我已经能够从原始视频数据(in.rgb)中查看一帧,使用C#.NET for Win Forms中的这段代码,使用图片框控件。 但不知道如何做多帧,也许有一个寻找控制

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;
byte[]imageData=File.ReadAllBytes(“output.rgb”);
Console.WriteLine(“imageDataLen=“+imageData.Length”);
整数宽度=320;
整数高度=240;
var bmp=新位图(宽度、高度、像素格式.Format8BppIndex);
//bmp=(位图)转换成灰度(bmp);
调色板pal=bmp.palete;

对于(int i=0;i),您可以简单地将视频帧字节传输到directx表面,并使用directx API显示它。至于查找:您可能需要编写一个自定义源过滤器(对于directshow)媒体基础的自定义媒体源。谢谢!我应该用这里的细节将视频帧字节传送到DirectX表面。这似乎是C++实现,这可以用C语言来完成吗?我也可以使用DirectX API和DirectShow一起编写自定义源过滤器(用于查找等)?DirectShow提供了硬件加速的视频渲染器,如VMR9和EVR,您可以直接在应用程序中使用。您只需为原始未压缩视频数据提供自定义源。您可以查看PushSource DirectShow筛选器示例:您可以在此处查看.NET实现:您只需将视频帧字节传输到directx表面并使用DirectX API显示它。至于搜索:您可能需要编写一个自定义源过滤器(用于directshow)媒体基础的自定义媒体源。谢谢!我应该用这里的细节将视频帧字节传送到DirectX表面。这似乎是C++实现,这可以用C语言来完成吗?我也可以使用DirectX API和DirectShow一起编写自定义源过滤器(用于查找等)?DirectShow提供硬件加速的视频渲染器,如VMR9和EVR,您可以直接在应用程序中使用。您只需提供原始未压缩视频数据的自定义源。您可以查看PushSource DirectShow筛选器示例:您可以在此处查看.NET实现: