2014-05-31 6 views
2

У меня есть приложение для форм Windows, написанное на C#, которое использует встроенный проигрыватель Windows Media (AxInterop.WMPLib.dll и WMPLib.dll) для воспроизведения некоторых видеофайлов. Теперь мне нужно добавить опцию для захвата изображения из видео при нажатии кнопки. Если я установил для параметра без окон значение true, я смогу захватить изображение видео, но когда я установил параметр без окон в true, я не вижу видеоизображения на некоторых компьютерах. Без окон варианта я только получаю черный экран с этим кодом:C# Windows Forms захватить изображение из встроенного проигрывателя Windows Media

 System.Drawing.Image ret = null; 
     try{ 
      Bitmap bitmap = new Bitmap(wmPlayer.Width-26, wmPlayer.Height-66); 
      { 
       Graphics g = Graphics.FromImage(bitmap); 
       { 
        Graphics gg = wmPlayer.CreateGraphics(); 
        { 
         this.BringToFront(); 

          g.CopyFromScreen(
          wmPlayer.PointToScreen(
           new System.Drawing.Point()).X+13, 
          wmPlayer.PointToScreen(
           new System.Drawing.Point()).Y, 
          0, 0, 
          new System.Drawing.Size(
           wmPlayer.Width-26, 
           wmPlayer.Height-66) 
          ); 
        } 
       } 
       using (MemoryStream ms = new MemoryStream()){ 
         bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Png); 
         ret = System.Drawing.Image.FromStream(ms); 
         ret.Save(@"C:\\WMP_capture.png"); 
         pictureBox1.Image=ret; 
       } 
      } 
      bitmap.Dispose(); 

     }catch (Exception){ } 

Как я могу захватить кадр (снимок) от воспроизведения видео во встроенном проигрывателе Windows Media без окон опции в C#?

Или есть ли какой-либо другой видеопроигрыватель для форм Windows C, которые можно легко реализовать и которые поддерживают функцию захвата.

ответ

0

Надежда этот код работать для вас

if (!string.IsNullOrEmpty(axWindowsMediaPlayer1.URL)){ 
axWindowsMediaPlayer1.Ctlcontrols.pause(); 

System.Drawing.Image ret = null; 
try 
{ 
    // take picture BEFORE saveFileDialog pops up!! 
    Bitmap bitmap = new Bitmap(axWindowsMediaPlayer1.Width, axWindowsMediaPlayer1.Height); 
    { 
     Graphics g = Graphics.FromImage(bitmap); 
     { 
      Graphics gg = axWindowsMediaPlayer1.CreateGraphics(); 
      { 
       //timerTakePicFromVideo.Start(); 
       this.BringToFront(); 
       g.CopyFromScreen(
        axWindowsMediaPlayer1.PointToScreen(
         new System.Drawing.Point()).X, 
        axWindowsMediaPlayer1.PointToScreen(
         new System.Drawing.Point()).Y, 
        0, 0, 
        new System.Drawing.Size(
         axWindowsMediaPlayer1.Width, 
         axWindowsMediaPlayer1.Height) 
        ); 
      } 
     } 
     // afterwards save bitmap file if user wants to 
     if (saveFileDialog1.ShowDialog() == DialogResult.OK) 
     { 
      using (MemoryStream ms = new MemoryStream()) 
      { 
       bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Png); 
       ret = System.Drawing.Image.FromStream(ms); 
       ret.Save(saveFileDialog1.FileName); 
      } 
     } 
    } 
} 
catch (Exception ex) 
{ 
    Debug.WriteLine(ex.Message); 
} 

}

еще один демо для вас: http://www.codeproject.com/Articles/34663/DirectShow-Examples-for-Using-SampleGrabber-for-Gr

+0

Спасибо за ответы, к сожалению, не работает. То же, что и с моим кодом ... на самом деле основная часть кода такая же. Вы знаете, как использовать DirectShow с WMP для захвата изображения? –

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