使用DirectShowLib-2005的摄像头拍摄的照片和视频

问题描述:

我正尝试在我的c#应用程序中使用摄像头拍照。我发现使用DirectShowLib。经过艰苦的研究,我找到了一个如何使用网络摄像头的例子,它在屏幕上显示完美的视频,但无法将位图图像保存在我的意愿中。代码使用DirectShowLib-2005的摄像头拍摄的照片和视频

样品,我发现采取picure将

public Bitmap snapImage() 
    { 
     IVMRWindowlessControl9 windowlessCtrl = null; 
     IBaseFilter vmr9 = null; 
     vmr9 = (IBaseFilter)new DirectShowLib.VideoMixingRenderer9(); 
     DirectShowLib.IVMRFilterConfig9 filterConfig = (DirectShowLib.IVMRFilterConfig9)vmr9; 
     int hr = filterConfig.SetNumberOfStreams(1); 
     hr = filterConfig.SetRenderingMode(DirectShowLib.VMR9Mode.Windowless); 

     windowlessCtrl = (IVMRWindowlessControl9)vmr9; 
     hr = windowlessCtrl.SetVideoClippingWindow(this.PreviewWindow.Handle); 
     hr = windowlessCtrl.SetAspectRatioMode(VMR9AspectRatioMode.LetterBox); 

     IntPtr currentImage = IntPtr.Zero; 

     Bitmap bmp = null; 

     //this is the line in wich I have problems 
     hr = windowlessCtrl.GetCurrentImage(out currentImage); 

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

     return bmp; 
    } 

而且我得到了:错误代码“错误HRESULT E_FAIL已经从COM组件的调用返回” -2147467259

我发现的样品可以在本页http://www.codeproject.com/Articles/34663/DirectShow-Examples-for-Using-SampleGrabber-for-Gr

任何人都可以帮我拍快照吗?或者任何一个可以告诉我怎么做我想做的事(显示视频和拍摄摄像头的快照)

Thankk你

+0

海,你能解决这个问题。我现在面临同样的问题。:-( – 2015-03-05 11:10:10

GetCurrentImage可能会返回E_FAIL(由设计行为),直到显示一个真正的视频帧,这是异步发生的。要检查这一点,只需在有问题的电话前显示一个消息框,等到视频开始流式传输,关闭该框,并且应该按照您最初的预期工作。