使用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你
答
GetCurrentImage
可能会返回E_FAIL
(由设计行为),直到显示一个真正的视频帧,这是异步发生的。要检查这一点,只需在有问题的电话前显示一个消息框,等到视频开始流式传输,关闭该框,并且应该按照您最初的预期工作。
海,你能解决这个问题。我现在面临同样的问题。:-( – 2015-03-05 11:10:10