2017-07-27 5 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:

貧乏人のWebカムプログラム。このアプリケーションはWin32サービスとして実行されます。
キャプチャグラフの出力をJPEG ファイルのストリームに変換し、それをTCP/IP経由でクライアントアプリケーションに送信します。

DxSnap:

利用のDirectShowキャプチャ デバイスのさらにピンからスナップショットを取ります。 MSはこれにWIAを使用することをお勧めしますが、 DirectShowとC#でやりたければ、こちらをご覧ください。

このサンプルは、非圧縮の ビデオをRBG24として出力するデバイスでのみ機能することに注意してください。これにはほとんどのウェブカメラが含まれますが、恐らくゼロtvチューナーが含まれます。

+0

DxSnapを実行しようとしましたが、私はusbからウェブカメラを削除したかのようにコンピュータのビープ音を鳴らす度に実行しました。間違っていることを理解できません。申し訳ありません。 – VBobCat

+0

全体として、ライブラリが使用しようとしているのはサンプルプロジェクトです。たとえ彼らが箱から出てこないように見えても、それを調べる価値があります。このコードは、キャプチャ関連のタスクをどのように達成するかのヒントを提供します。 –

+0

はい、私はあなたが正しいと思いますが...それは私だけですか、それとも.NET 4.5のWebCamから写真を撮るには200行のコードが必要です。 – VBobCat

0

[OK]を、私はやることができた最高のは、(それがラフスクラッチである - しかし、写真を撮る)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 
関連する問題