2015-02-23 1 views
1

Я пытаюсь делать снимки с помощью веб-камеры в моем приложении 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

Hai, Вы могли решить проблему. Сейчас я столкнулся с той же проблемой. :-( –

ответ

0

GetCurrentImage не может вернуться E_FAIL (поведение по дизайну), пока не появится реальная видеокадров, которое происходит асинхронно. Чтобы проверить это, просто покажите окно сообщения перед рассматриваемым вызовом, дождитесь, пока видео начнет потоковое вещание, закройте окно, и вы должны выполнить вызов, как вы ожидали.

Смежные вопросы