Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用c#direcshow.net从当前渲染的视频中获取图像帧_C#_Winforms_Directshow - Fatal编程技术网

使用c#direcshow.net从当前渲染的视频中获取图像帧

使用c#direcshow.net从当前渲染的视频中获取图像帧,c#,winforms,directshow,C#,Winforms,Directshow,我的winform中有一个面板,在播放视频时,我需要从中抓取帧,这是在点击按钮之后,抓取的帧应该用文件名保存。我对实现这一点做了很多研究 最初,我尝试为特定面板提供截图功能,并将其显示在picurebox中。 1.“copyfromscreen()” 2.使用系统消息。 3.drawtobitmap()-特定于控件,所有这些都不是很好,我对结果不满意 后来我意识到directshow Ibasicvideo.getcurrentimage()中有一种方法可以从渲染视频中获取当前帧。我一直在互联网

我的winform中有一个面板,在播放视频时,我需要从中抓取帧,这是在点击按钮之后,抓取的帧应该用文件名保存。我对实现这一点做了很多研究

最初,我尝试为特定面板提供截图功能,并将其显示在picurebox中。 1.“copyfromscreen()” 2.使用系统消息。 3.drawtobitmap()-特定于控件,所有这些都不是很好,我对结果不满意

后来我意识到directshow Ibasicvideo.getcurrentimage()中有一种方法可以从渲染视频中获取当前帧。我一直在互联网上搜索一个好的工作示例,但没有成功,我真的需要这方面的帮助


在单独的picturebox中显示视频当前图像的任何解决方案都是值得欣赏的。提前感谢

使用本文链接查看
vmr9snaper
示例:


当我试图在代码中包含VMR9凝灰岩时,我得到了NullReferenceException。还有别的办法吗?
int hr = windowlessCtrl.GetCurrentImage(out currentImage);
DsError.ThrowExceptionForHR(hr);

if (currentImage != IntPtr.Zero)
{
  BitmapInfoHeader structure = new BitmapInfoHeader();
  Marshal.PtrToStructure(currentImage, structure);

  bmp = new Bitmap(structure.Width, structure.Height, (structure.BitCount / 8) * structure.Width, System.Drawing.Imaging.PixelFormat.Format32bppArgb, new IntPtr(currentImage.ToInt64() + 40));
  bmp.RotateFlip(RotateFlipType.RotateNoneFlipY);

  if (saveFileDialog.ShowDialog() == DialogResult.OK)
  {
    bmp.Save(saveFileDialog.FileName.ToString(), System.Drawing.Imaging.ImageFormat.Jpeg);
  }
}