2017-07-27 5 views
0

Ich bin beschämt, aber ich werde trotzdem fragen: Was ist die einfachste Möglichkeit, ein Bild von einer Webcam mit seiner Standardgröße und Farbtiefe aufzunehmen?Capture Standbild von der Webcam (DirectSHowLib, VB.NET)

Ich fing an, mit DirectShowLib zu spielen, aber ich bin ahnungslos ... Kann mir jemand eine Führung geben?

Imports DirectShowLib 

Public Class Form1 

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 

     PictureBox1.Image = Nothing 

     Dim Cam As DsDevice = DsDevice.GetDevicesOfCat(FilterCategory.VideoInputDevice).FirstOrDefault 

     If Cam IsNot Nothing Then 

      Stop 
      ' ... what now? 

     End If 

    End Sub 

End Class 

Antwort

1

DirectShowLib des samples DxSnap, DxWebCam (C#) zeigt, wie von einer Webcam zu erfassen. Es gibt auch VB.NET DxLogoVB dort, es tut eine andere Sache, aber ist immer noch gut, wenn Sie auch nach einem DriectShow.NET + VB.NET Beispielcode suchen.

DxWebCam:

ein schlechter Web-Cam-Programm des Menschen. Diese Anwendung wird als Win32-Dienst ausgeführt.
Es nimmt die Ausgabe eines Capture-Graphen, wandelt es in einen Strom von JPEG Dateien und sendet es über TCP/IP an eine Client-Anwendung.

DxSnap:

Verwenden Directshow Schnappschüsse aus dem noch Stift eines Capture Gerät zu nehmen. Beachten Sie, dass der MS Sie dazu ermutigt, WIA zu verwenden, aber wenn Sie mit DirectShow und C# ausführen möchten, gehen Sie wie folgt vor.

Beachten Sie, dass dieses Beispiel nur mit Geräten funktioniert, die unkomprimiertes Video als RBG24 ausgeben. Dazu gehören die meisten Webcams, aber wahrscheinlich keine TV-Tuner.

+0

Ich habe versucht, DxSnap zu starten, jedes Mal wenn ich es Computer piept, als ob ich die Webcam von USB entfernt hätte. Ich kann nicht herausfinden, was falsch läuft, sorry. – VBobCat

+0

Mein Punkt ist, dass die Bibliothek versucht zu verwenden kommt mit Beispielprojekten. Es lohnt sich, in sie zu schauen, auch wenn sie nicht aus der Box zu laufen scheinen. Der Code gibt Hinweise, wie Capture-bezogene Aufgaben gelöst werden können. –

+0

Ja, ich denke, du hast recht, aber ... Ist es nur ich oder jemand anderes findet unerhört, dass man 200 Zeilen Code braucht, um ein Bild von einer WebCam in .NET 4.5 zu machen? – VBobCat

0

Ok, das Beste, was ich konnte auf AForge.Controls und AForge.Video.DirectShow tun abhängt und mit diesem Code arbeitet, die ich verbessern will (es ist ein grober Kratzer - aber nimmt das Bild):

Public Class Form1 
    Private Sub Test() Handles Me.Load 
     Dim rf As New RolleiFlex 
     PictureBox1.Image = rf.Click 
    End Sub 
End Class 

Public Class RolleiFlex 

    Public Sub New() 
     Dim vDevices = New AForge.Video.DirectShow.FilterInfoCollection(FilterCategory.VideoInputDevice) 
     Devices = vDevices.Cast(Of FilterInfo).Select(
      Function(fi) New Device With { 
      .Name = fi.Name, 
      .MonikerString = fi.MonikerString}).ToArray 
     SelectedDevice = Devices.FirstOrDefault 
     vDevices = Nothing 
    End Sub 

    Public Devices As Device() 

    Public Property SelectedDevice As Device 

    Public Class Device 
     Public Property Name As String 
     Public Property MonikerString As String 
    End Class 

    Public Function Click() As Bitmap 
     Dim retBmp As Bitmap 
     Dim camera As New AForge.Controls.VideoSourcePlayer 
     camera.VideoSource = New VideoCaptureDevice(SelectedDevice.MonikerString) 
     camera.Start() 
     Do 
      retBmp = camera.GetCurrentVideoFrame 
      If retBmp Is Nothing Then Threading.Thread.Sleep(100) 
     Loop While retBmp Is Nothing 
     camera.Stop() 
     camera.Dispose() 
     camera = Nothing 
     Return retBmp 
    End Function 

End Class 
Verwandte Themen