C# 如何从筛选器访问图像数据-DirectShowNet
我试图弄清楚,我如何从过滤器中获取位图数据。 我正在使用DirectShowNet包装器从我的网络摄像机中获取图像 我目前的代码是:C# 如何从筛选器访问图像数据-DirectShowNet,c#,video,directshow,directshow.net,C#,Video,Directshow,Directshow.net,我试图弄清楚,我如何从过滤器中获取位图数据。 我正在使用DirectShowNet包装器从我的网络摄像机中获取图像 我目前的代码是: public partial class Form1 : Form { public IGraphBuilder gb; public ICaptureGraphBuilder2 cgb; public IBaseFilter filter; public Form1() { InitializeCompo
public partial class Form1 : Form
{
public IGraphBuilder gb;
public ICaptureGraphBuilder2 cgb;
public IBaseFilter filter;
public Form1()
{
InitializeComponent();
DsDevice[] videoInputDevices = DsDevice.GetDevicesOfCat(FilterCategory.VideoInputDevice);
object obj = null; Guid iid = typeof(IBaseFilter).GUID;
videoInputDevices[1].Mon.BindToObject(null, null, ref iid, out obj);
filter = (IBaseFilter)obj;
((IAMCameraControl)filter).Set(CameraControlProperty.Exposure, 0, CameraControlFlags.Auto);
gb = (IGraphBuilder) new FilterGraph();
cgb = (ICaptureGraphBuilder2) new CaptureGraphBuilder2();
cgb.SetFiltergraph(gb);
gb.AddFilter(filter, "First Filter");
cgb.RenderStream(PinCategory.Preview, MediaType.Video, filter, null, null);
((IVideoWindow)gb).put_Owner(this.panel1.Handle);
((IVideoWindow)gb).put_WindowStyle(WindowStyle.Child | WindowStyle.ClipChildren);
((IVideoWindow)gb).put_Visible(OABool.True);
((IVideoWindow)gb).SetWindowPosition(0, 0, this.panel1.Width, this.panel1.Height);
((IMediaControl)gb).Run();
}
}
这段简单的代码只是将网络摄像机输出渲染到面板控件。我尝试使用定时器和SaveToBitmap函数将图像从面板复制到位图,但之后位图是空白的
我读了一些关于Grabber过滤器的内容,但我的解决方案不起作用,它将null ptr返回到缓冲区/样本
我想问,为了能够读取图像数据,我应该添加什么?
非常感谢。DirectShow管道的标准行为是,过滤器在不向控制应用程序和代码显示数据的情况下彼此传递数据,因此无法直接访问数据 您通常会执行以下操作之一:
- 下面是一个详细的例子: