2017-07-27 190 views
0

我很慚愧,但我仍會問:哪種方法可以從網絡攝像頭以默認尺寸和顏色深度拍攝圖片?從網絡攝像頭捕捉靜態圖像(DirectSHowLib,VB.NET)

我開始玩DirectShowLib,但我很無能......任何人都可以給我一個指導嗎?

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 

回答

1

DirectShowLib的samples DxSnap,DxWebCam(C#)展示瞭如何從一個攝像頭捕捉。在那裏還有VB.NET DxLogoVB,它做了一個不同的事情,但是如果你也尋找一些DriectShow.NET + VB.NET示例代碼,它仍然很好。

DxWebCam:

一個窮人的網絡攝像頭程序。此應用程序作爲Win32服務運行。
它需要捕獲圖的輸出,將其轉換成JPEG 文件流,並通過TCP/IP將其發送到客戶端應用程序。

DxSnap:

使用DirectShow拍攝快照從捕捉 設備的靜止針。請注意,MS鼓勵您使用WIA,但如果您想使用DirectShow和C#執行 ,請執行以下操作。

請注意,此示例僅適用於將未壓縮的 視頻輸出爲RBG24的設備。這將包括大多數攝像頭,但可能是零電視調諧器。

+0

我試圖運行DxSnap,每次運行計算機時都會發出嗶嗶聲,就像我從usb上移除網絡攝像頭一樣。無法弄清楚發生了什麼問題,對不起。 – VBobCat

+0

我的觀點總的來說就是圖書館試圖使用樣本項目。即使他們似乎沒有用完,也值得關注它們。該代碼提供瞭如何實現捕獲相關任務的提示。 –

+0

是的,我認爲你是對的,但是......是不是隻有我或其他人發現離譜的人需要200行代碼才能從.NET 4.5中的WebCam中拍照? – VBobCat

0

好吧,我能做到的最好取決於AForge.ControlsAForge.Video.DirectShow並正在與此代碼,我打算改進(這是一個粗略的劃痕 - 但拍攝照片):

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