# USB oder TCP/IP Camera VB.Net



## knoddelpusch (10 Dezember 2015)

Hallo zusammen,

ich mache gerade meinen Techniker und mache als Abschluss-Projekt einen Pick-and-Place Roberter.
Mein Vorhaben ist, das ich eine "Spielfeld" auswertung über eine Camera mache. Es soll ein Bild aufgenommen werden und über VB.Net ausgewertet werden.

Ich habe die Auswahl zwischen einer USB oder einer TCP/IP.
Am Anfang wollten sie unbedingt eine TCP/IP mitlerweile ist es ihnen egal.

Meine Frage wäre jetzt welche Camera ist einfacher in ein VB Programm einzubinden ist.

Gruß
Torsten


----------



## Larry Laffer (11 Dezember 2015)

Hallo,
ohne dazu jetzt etwas genaues zu wissen ...
Ich denke mal, dass du vom Hersteller eine DLL bekommst, die du einbindest - ggf. auch ein ActiveX. Ob das jetzt für EtherNet oder USB ist ist von der Komplexität sehr wahrscheinlich egal. Die Frage sollte eher sein, was die mitgelieferte Bibliothek dir so an Funktionen zur Verfügung stellt.

Aber wie auch immer - du hast dann erstmal nur ein Bild im Programmspeicher. Weißt du denn, wie man entsprechende Auswertungen des Bildes programmiert ? Diese Funktionen werden nämlich nicht Bestandteil der Kamera-DLL sein ...

Gruß
Larry


----------



## MasterOhh (11 Dezember 2015)

Eine stinknormale USB Webcam sollte doch genügen. Wenn du Dr. Google nach "vb .net webcam" fragst, findest du sofort Beispiele und Tutorials.
Ich selber habe schon mit emgucv und aforge gearbeitet (allerdings in C#). Beide haben schon sehr mächte Funktionen für die Bildverarbeitung mit an Bord und es gibt auch hier tonnenweise Anleitungen im Netz. 

Wenn du etwas mehr industrietaugliches suchst, kann ich dir IDS Imaging empfehlen. Die haben gute USB und Ethernet Kameras und bieten gleich noch ein sehr mächtiges SDK für das Erstellen eigener Anwendungen und guten Support (kostenlos!). Allerdings sind die Preise der Kameras auch "industrietauglich"


----------



## Larry Laffer (11 Dezember 2015)

@MasterOhh:
wenn du da allerdings an Halcon denkst dann setzt dieses System auch mächtiges Wissen über genau dieses System voraus - es läßt sich allerdings ziemlich problemlos in die .Net-Welt einbinden ...

Gruß
Larry


----------



## MasterOhh (11 Dezember 2015)

Larry Laffer schrieb:


> @MasterOhh:
> wenn du da allerdings an Halcon denkst dann setzt dieses System auch mächtiges Wissen über genau dieses System voraus - es läßt sich allerdings ziemlich problemlos in die .Net-Welt einbinden ...
> 
> Gruß
> Larry



Nein, Halcon kenne ich garnicht  .
IDS Imaging bietet ein eigenes SDK, aber auch das setzt natürlich einen gewissen Mindeststand an Programmierkenntnissen voraus.

Ansonsten halt emgucv oder aforge. Beides Open Source, beides mit sovielen Code-Beispielen im Netz, das man sich theoretisch viele Anwendungen einfach nur zusammenkopieren muss. Trotzdem sollte man auch hier etwas Ahnung vom Programmieren haben um wenigstens den Code Ansatzweise zu verstehen.


----------



## Larry Laffer (11 Dezember 2015)

... ich habe zwar nicht die Frage gestellt ... aber das interessiert mich jetzt trotzdem. Ich werde mir das mal im Netz anschauen - man kann ja nie wissen ... 8)

Gruß
Larry


----------



## knoddelpusch (12 Dezember 2015)

Hallo,

ob ich jetzt VB oder C# nehme ist fast egal, habe jetzt ein Jahr VB gehabt und jetzt sind wir bei C# müsste also fast egal sein.
Versteh das mit den emgucv, aforge oder Halcon, nicht so ganz, ist das so eine Art Bibliothek?

Gruß


----------



## MasterOhh (12 Dezember 2015)

Ja so kann man das sagen, wobei ich mir da bei Halcon nicht 100% sicher bin.


----------



## oliver.tonn (12 Dezember 2015)

Halcon auch, hatte mein vorheriger Kunde im Einsatz. 

Von irgendwas mit Internetzugang gesendet.


----------



## oliver.tonn (12 Dezember 2015)

Common Vision Blox (CVB) von Stemmer Imaging gäbe es auch noch.

Von irgendwas mit Internetzugang gesendet.


----------



## oliver.tonn (12 Dezember 2015)

Bezüglich der Preise lassen die Hersteller/Händler auf jedenfall mit sich reden, kann die ganze Angelegenheit denen doch auch nutzen.

Von irgendwas mit Internetzugang gesendet.


----------



## knoddelpusch (15 Dezember 2015)

Hallo,
so ich habe jetzt mal ein VB.Net Programm geschrieben welche mir von einer USB WebCam ein Bild erstellt und dies dann in eine Schwarz Weiß bild Umwandelt.
Ich habe jetzt nur ein Problem das wenn ich das Programm schließe ich meine Rechner Neustarten muss weil ich nicht mehr auf die WebCam komme.


```
Imports System.IO
Imports System.Drawing.Imaging
Imports System.Runtime.InteropServices

Public Class Form1
    Dim mybild As Bitmap

    Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByRef pDst As Byte, ByRef pSrc As Byte, ByVal ByteLen As Integer)
    Public Declare Auto Function SendMessage Lib "user32" (ByVal hwnd As IntPtr, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer
    Const EM_LINEFROMCHAR As Integer = &HC9
    Const EM_LINEINDEX As Integer = &HBB
    Public Declare Auto Function capCreateCaptureWindow Lib "avicap32.dll" (ByVal lpszWindowName As String, ByVal dwStyle As Integer, ByVal x As Integer, ByVal y As Integer, ByVal nWidth As Integer, ByVal nHeight As Integer, ByVal hWndParent As IntPtr, ByVal nID As Integer) As IntPtr
    Const WS_CHILD As Integer = &H40000000
    Const WS_VISIBLE As Integer = &H10000000
    Const WM_USER As Short = &H400S
    Const WM_CAP_START As Short = &H400S
    Const WM_CAP_EDIT_COPY As Integer = (WM_CAP_START + 30)
    Const WM_CAP_DRIVER_CONNECT As Integer = (WM_CAP_START + 10)
    Const WM_CAP_SET_PREVIEWRATE As Integer = (WM_CAP_START + 52)
    Const WM_CAP_SET_OVERLAY As Integer = (WM_CAP_START + 51)
    Const WM_CAP_SET_PREVIEW As Integer = (WM_CAP_START + 50)
    Const WM_CAP_DRIVER_DISCONNECT As Integer = (WM_CAP_START + 11)

    'Um den Aufruf der Capture Funktionen noch einfacher zu machen braucht man noch sog. Wrapper Funktionen.
    'Diese sind ganz einfach aufzurufen und übernehmen den kompilzierteren Aufruf der API Methoden.

    'Hier werden 3 erstellt:
    'CreateCaptureWindow - Zeigt das WebCam Bild auf einem Control an
    'CapturePicture - Erstellt einen Schnappschuss und gibt ihn als System.Drawing.Image zurück.
    'Disconnect - Gibt die für die WebCam benötigten Resourcen frei

    ' Handle für die WebCam.

    Dim videoHandle As System.IntPtr

    ' senden eienr Ausgabenvorschau der WebCam an das betreuende control  hWndParent.

    Public Function CreateCaptureWindow(ByRef hWndParent As IntPtr, Optional ByRef x As Integer = 0, Optional ByRef y As Integer = 0, Optional ByRef nWidth As Integer = 1280, Optional ByRef nHeight As Integer = 720, Optional ByRef nCameraID As Integer = 0) As IntPtr 'Hier wird die Cam eingestellt 1 für intern 0 extern

        Dim previewHandle As IntPtr
        previewHandle = capCreateCaptureWindow("Video", WS_CHILD + WS_VISIBLE, x, y, nWidth, nHeight, hWndParent, 1)
        SendMessage(previewHandle, WM_CAP_DRIVER_CONNECT, nCameraID, 0) '1
        SendMessage(previewHandle, WM_CAP_SET_PREVIEWRATE, 15, 0)
        SendMessage(previewHandle, WM_CAP_SET_OVERLAY, 1, 0)
        SendMessage(previewHandle, WM_CAP_SET_PREVIEW, 1, 0)
        Return previewHandle

    End Function

    Public Function CapturePicture(ByRef nCaptureHandle As IntPtr) As System.Drawing.Image
        My.Computer.Clipboard.Clear()
        SendMessage(nCaptureHandle, WM_CAP_EDIT_COPY, 0, 0)
        Return My.Computer.Clipboard.GetImage
    End Function

    Public Sub Disconnect(ByRef nCaptureHandle As IntPtr, Optional ByRef nCameraID As Integer = 0)
        SendMessage(nCaptureHandle, WM_CAP_DRIVER_DISCONNECT, nCameraID, 0) '1
    End Sub

    'Das wars! Die API wird von den Wrapper Funktionen sauber aufgerufen und die WebCam steht zur Verfügung.
    'Um das Bild nun z.B. in einer PictureBox anzuzeigen genügt folgender Code:

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        videoHandle = Me.CreateCaptureWindow(Me.picLive.Handle)
    End Sub

    Private Sub btnBildUebernehmen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBildUebernehmen.Click
        Dim BILD As Bitmap

        BILD = CapturePicture(videoHandle)
        picSchwarzWeiß.Image = BILD
    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Me.Text = Now
    End Sub

    Private Sub btnSchwerzWeiß_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSchwerzWeiß.Click
        ' Wandelt das Bild in ein Graustufenbild um
        ' Gewichtung der Farben Luminanz-Umsetzung

        Dim x, y As Integer
        Dim Farbe As Color
        Dim FarbeGrau As Color
        Dim Grauwert As Integer

        Dim Bild As Bitmap = picSchwarzWeiß.Image
        Dim BildGrau As New Bitmap(Bild.Width, Bild.Height)


        For y = 0 To Bild.Height - 1
            For x = 0 To Bild.Width - 1
                Farbe = Bild.GetPixel(x, y)
                Grauwert = Farbe.R * 0.3 + Farbe.G * 0.59 + Farbe.B * 0.11 '0.3  0.59  0.11
                FarbeGrau = Color.FromArgb(Grauwert, Grauwert, Grauwert)
                BildGrau.SetPixel(x, y, FarbeGrau)
            Next
        Next

        ' Jetzt GrauBild in PictureBox anzeigen
        picSchwarzWeiß.Image = BildGrau
    End Sub

End Class
```

Kann mir einer Sagen woran das liegen kann?
Gruß


----------



## Larry Laffer (16 Dezember 2015)

Ich hätte da eine Idee :
Du solltest beim Verlassen deiner Applikation die DisConnect-Methode aufrufen (wie es in deinem Hilfetext im Kopf der Klasse beschrieben ist).
Generell ist es bei .Net-Anwendungen immer wichtig, allokierte Resourcen wieder frei zu geben ...

Gruß
Larry


----------



## wolfi_by (16 Dezember 2015)

Moin!

VB.net? dann nimm doch AForge... da is alles drin. Bildererkennung, auswertung umwandlung usw. 
Und das auswählen der Kamera machen die auch anders... Da brauchts keine Librariess

Gruß


----------



## knoddelpusch (17 Dezember 2015)

Hallo,
Danke für den hinweis, geht jetzt super.
Ist AForg schwer zu lernen?
Wenn ja ist das empfehlenswert wenn man sich schon gut auskennt?
Gruß


----------



## wolfi_by (17 Dezember 2015)

Hallo
Was heisst schwer zu lernen...? Sind eben Bibliotheken zum einbinden. Damit ist dann Objekterkennung möglich. Sind auch beispiele dabei.
Gruss


----------



## knoddelpusch (17 Dezember 2015)

Hallo,
aso das sind nur Biblitheken zum einbinden.
Jetzt hätte ich noch ein Frage wo ich im Intern noch nicht fündig geworden bin.
Ich habe jetzt über ein WebCam eine Bild in einer PictureBox, dieses möchte ich über einen Button auf die Farbe Weiß überprüfen
und wenn es nicht Weiß ist soll es in ein Schwarzes Pixel umgewandelt werden.
Da es nicht ein rein Weißes Pixel sein kann, muss ich da ein kleiner gleich Abfrage machen.
Meine IF Abfrage

```
For x = 0 To BildS.Width - 1
            For y = 0 To BildS.Height - 1
                If Not BildS.GetPixel(x, y) = Color.Black Then
                    BildS.SetPixel(x, y, Color.White)
                End If
            Next y
        Next x
```
Da müsste ich ja an der Stelle "Color.Black" eine Toleranz bzw. eine kleiner gleich Abfrage machen, wie mach ich das da an der Stelle?

Gruß


----------



## Larry Laffer (18 Dezember 2015)

Hallo,
du musst die Farb-Information auf Basis ihrer ARGB-Bestandteile vergleichen - dort hättest du wieder Integer, bei denen du ein <= oder >= machen kannst.
Wenn du allerdings ein "buntes" Bild hast dann ist deine "Binarisierung" ggf. ein bißchen ausprobieren.
Also etwa so :

```
Dim myPixelColor as Color

und in der Schleife dann

myPixelColor = BildS.GetPixel(x, y)
If myPixelColor.A < 80 or myPixelColor.R < 80 or  myPixelColor.G < 80 or  myPixelColor.B < 80 then
   BildS.SetPixel(x, y, Color.Black)
else
   BildS.SetPixel(x, y, Color.White)
End If
```

Gruß
Larry


----------



## wolfi_by (18 Dezember 2015)

Guten Morgen!

@Larry: wollt ich grad schreiben

Andere Möglichkeit wäre noch das Bild umzuwandeln z. B. in Schwarzweiss... kommt aufs Bild drauf an


----------



## MasterOhh (18 Dezember 2015)

Wie groß sind denn die Bilder die du bearbeitest? GetPixel ist so ziehmlich die langsamste Variante die du dafür verwenden kannst.
Schau dir die Bitmap.LockBits Methode an. (Findest genug Beispiele dazu im Netz) Damit kannst du dein Bitmap direkt im Speicher bearbeiten (unmanaged) was deutlich schneller sein sollte.
Ansonsten, wie schon dutzende male hier erwähnt, AForge biete einige Filterfunktionen die dir evtl. helfen können.


----------



## Larry Laffer (18 Dezember 2015)

@MasterOhh:
Also mit GetPixel und SetPixel habe ich bislang keine schlechten Erfahrungen gemacht. Ich habe sogar ein Control erstellt, dass auf diese Weise (schon im DesignMode) die Durchsichtigkeit einer Grafik ändert.
Du hast aber Recht - wenn die Grafik sehr groß ist dann wird das ggf. ein bißchen zäh ...

Gruß
Larry


----------



## MasterOhh (18 Dezember 2015)

Wenn statische Bitmaps bearbeitet werden, wird man da wahrscheinlich nicht viel merken, aber mit Streams >15 FPS is dann essig.


----------



## knoddelpusch (23 Dezember 2015)

Hallo zusammen,
ich wünsche euch erstmal allen frohe Weihnachten und besinnliche Weihnachtstage.

Meine Bildaufnahme und die Bildauswertung funktioniert ganz gut.
Mein nächstes Problem wo ich jetzt schon länger daran sitzte, in dem Bild wo ich aufgenommen und Umgewandelt habe, sind mehrere weiße Kreise,
von diesen Kreisen würde ich gerne den Mittelpunkt bestimmen und diesen dann in einer Variablen speichern.

Gruß


----------



## wolfi_by (23 Dezember 2015)

Hallo!
und schon wieder: AForge...
schöne Weihnachten


----------



## MasterOhh (23 Dezember 2015)

Macht genau das was du haben willst:
http://www.aforgenet.com/articles/shape_checker/
=> Circle detection


----------



## knoddelpusch (4 Januar 2016)

Hallo,
erst mal noch ein Frohes neues Jahr.

Ich habe mich mal etwas mit AForge beschäftigt und habe mal die Cam damit Programmiert.
Allerdings mache ich jetzt schon über einer Woche rum wo ich die Kreise auswertung probiere und es einfach nichts wird.
Man kann doch das AForge auch mit vb.net programmieren?
Die Beispiele sind ja alle in C# hab das auch mal damit Probiert aber irgendwie wird das alles nichts.


```
Imports System.IO
Imports System.Drawing.Image
Imports System.Runtime.InteropServices
Imports System.Drawing
Imports System.Drawing.Imaging

Imports AForge.Controls
Imports AForge.Video
Imports AForge.Video.DirectShow
Imports AForge.Math.Geometry
Imports AForge.Imaging


Public Class Form1

    Dim VideoCaptureSource As VideoCaptureDevice
    Dim VideoDevices As New FilterInfoCollection(FilterCategory.VideoInputDevice)

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim MySigleDevice As FilterInfo

        If VideoDevices.Count = 0 Then
            boxCam.Items.Add("Keine WebCams")
        Else
            For Each MySigleDevice In VideoDevices
                boxCam.Items.Add(MySigleDevice.Name)
            Next
        End If
        boxCam.SelectedIndex = 0
    End Sub

    Private Sub Form1_FormClosing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
        VideoSourcePlayer1.SignalToStop()
        VideoSourcePlayer1.WaitForStop()
        VideoDevices = Nothing
        VideoCaptureSource = Nothing
    End Sub

    Private Sub btnStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStart.Click
        VideoCaptureSource = New VideoCaptureDevice(VideoDevices(boxCam.SelectedIndex).MonikerString)
        VideoSourcePlayer1.VideoSource = VideoCaptureSource
        VideoSourcePlayer1.Start()
    End Sub
```
Gruß


----------



## wolfi_by (4 Januar 2016)

Hallo!
Auch ein schönes neues Jahr!

Die Beschreibung "funktioniert alles nicht" is jetz nicht gerade aussagekräftig.

Ob VB oder C# is egal...

Findet dein Code die Kamera? Wo ist der Code wo gesucht wird? Was macht das Program? Was macht es nicht? Hast Du schon per Einzelschritt geschaut was passiert?

Gruse Wolfgang


----------



## knoddelpusch (4 Januar 2016)

Hallo

es funktioniert alles so weit, er findet die Camaras und bekomme auch ein Bild 
und kann schon ein „Schnappschuss“ machen. 
Nur das mit der Bildauswertung bezüglich der Kreise funktioniert nicht.

Gruß


----------



## wolfi_by (4 Januar 2016)

Hallo!
Na das ist doch schon mal ein Anfang. Dann weisst Du ja was nicht funktioniert. Hast Du schon mal einzelschritt gemacht und geschaut was fas programm macht oder nicht macht? Hast du das Bild schon mal in der Demosoftware von Aforge analysieren lassen? Wo liegt der unterschied zu deinem programm?
Gruss


----------



## knoddelpusch (6 Januar 2016)

Hallo
die Kreis erknnung funktioniert jetzt endlich, war wie meisten nur ein kleiner Fehler.
Also die Bildauswertung funktioniert jetzt soweit ganz gut.

Jetzt hätte ich da noch eine andere Frage und zwar wegen der Camera auswahl.
Kann ich die in VB schon fest vorschreiben das ich da keine mehr auswählen muss?
Habe da zwei gleich Cameras, über USB, am Laptop.

Grus


----------



## MasterOhh (7 Januar 2016)

Schau dir mal die _MonikerString_ Eigenschaft der FilterInfo Klasse an. So ganz eindeutig lassen sich damit wohl die Kamera auch nicht unterscheiden (abhängig vom USB Port und ob die Kameras von der gleichen Marke sind). Aber vieleicht haut das bei dir hin. Geht natürlich am besten, wenn du nicht ständig Kameras umstöpselst.


----------



## knoddelpusch (11 Januar 2016)

Hallo

danke funktioniert super.
Habe jetzt zwei gleiche Kameras angeschlossen und funktioniert ganz gut.
Man darft halt wirklich nicht die Kameras umstöpseln sonst werden die Bilder vertauscht.

Hab noch eine Auswahl dazugemacht welche man auswählen will.

Hier mal den Code

```
Imports AForge.Video.DirectShow

'Variablen für Cameras
    Private WithEvents CamFlaeche As VideoCaptureDevice
    Private WithEvents CamRand As VideoCaptureDevice

Private Sub btnCam_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCam.Click
        CamFlaeche = getVideoCaptureDevice(2)
        CamRand = getVideoCaptureDevice(1)

        If CheckBox8.Checked Then
            If VideoSourcePlayer1.IsRunning Then
                VideoSourcePlayer1.Stop()
            End If

            VideoSourcePlayer1.VideoSource = CamFlaeche
            VideoSourcePlayer1.Start()
        End If

        If CheckBox9.Checked Then
            If VideoSourcePlayer2.IsRunning Then
                VideoSourcePlayer2.Stop()
            End If
            VideoSourcePlayer2.VideoSource = CamRand
            VideoSourcePlayer2.Start()
        End If

        If Not CheckBox8.Checked And Not CheckBox9.Checked Then
            MsgBox("Cam auswählen")
        End If

        If VideoSourcePlayer1.IsRunning And Not CheckBox8.Checked Then
            VideoSourcePlayer1.Stop()
        End If

        If VideoSourcePlayer2.IsRunning And Not CheckBox9.Checked Then
            VideoSourcePlayer2.Stop()
        End If

    End Sub

  Private Function getVideoCaptureDevice(ByRef x As Integer) As VideoCaptureDevice
        Dim Cams As New FilterInfoCollection(FilterCategory.VideoInputDevice) 'Alle Geräte ermitteln
        Return New VideoCaptureDevice(Cams(x).MonikerString) 'Entsprechendes Gerät auswählen
    End Function
```


----------



## knoddelpusch (23 Februar 2016)

Hallo
es ist zwar schon etwas älter aber ich habe da jetzt noch ein Problem.
Habe es jetzt in VB 2008 Programmiert und bekomme da dann eine Video was Stopped angezeigt.
Woran kann das liegen?


----------



## wolfi_by (23 Februar 2016)

Hi!

Wo zeigt was video stopped an?

Und warum programmierst du mit so altem zeug?
Nimm VisualStudio 2015 Community... Is auch kostenlos und hat fast den Umfang von Peofessional...

Gruss


----------



## knoddelpusch (23 Februar 2016)

Hallo,
Das bekomme ich im Video Player angezeigt, arbeite mit aforge Bibliothek.
Mach gerade mein Abschlussprojekt für meinen Techniker und da habe ich auf der Ipc (soft-sps) nur beschränk Platz (ca. 1 GB freier Platz) bei vb 2010 reicht der Platz nicht mehr.


----------



## wolfi_by (23 Februar 2016)

Naja... Irgendwoher muss das stop ja kommen... Schon debugausgaben eingefügt bzw geschaut was vor dem stop passiert? Mal mit Breakpoints durchgrtippt?


----------



## knoddelpusch (23 Februar 2016)

Es kommt Connecting
und sobal wie der Video Player starten will kommt die Meldung


----------



## knoddelpusch (29 Februar 2016)

Hat jemand noch eine Idee?

Lade am Anfang die "Aforg.Video" Bib ein.


```
Private Sub btnCamStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCamStart.Click
        CamFlaeche = getVideoCaptureDevice(0)
        MsgBox("q") 'Test Msgbox steht noch nichts in dem Video Player
        VideoSourcePlayer1.VideoSource = CamFlaeche
        MsgBox("w") 'Test Msgbox steht Connecting in dem Video Player
        VideoSourcePlayer1.Start()
        MsgBox("r") 'Test Msgbox steht Video was stopped in dem Video Player    
    End Sub

    Private Sub btnCamStop_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCamStop.Click
        VideoSourcePlayer1.Stop()
    End Sub

    Private Function getVideoCaptureDevice(ByRef x As Integer) As VideoCaptureDevice
        Dim Cam As New FilterInfoCollection(FilterCategory.VideoInputDevice) 'Alle Geräte suchen
        Return New VideoCaptureDevice(Cam(x).MonikerString) 'Entsprechendes Gerät zuweisen
    End Function
```


----------



## wolfi_by (29 Februar 2016)

Hi!
Keine ahnung was da passiert. Aber wozu sind die msgboxen? Setz doch einen haltepunkt mit f9.
In der dritten sub übergibst du irgendwas auf x. Wo kommt das her? Steht da was drin? Das videodevice wird aber nich auf x zugewiesen... Zumindest für mich nicht sichtba.
Und ja... Eine genaue beschreibung was geht und was nicht geht und wo es probleme gibt 
wäre nicht schlecht.

Hast du schon mal mit einem beispielprogramm mit dem es funktioniert geschaut warum es dort geht und bei dir nicht?

Gruss


----------



## knoddelpusch (29 Februar 2016)

Hallo,
die msgboxen waren so etwas ähnliches wie die haltepunkte, habe das jetzt auch umgeändert.

Ich kann mein Programm starten, wenn ich dann die Kamera, mit dem Button CamStart, anschalten will kommt in dem Videoplayer Connecting... und bleibt da stehen.
Das programm läuft normal weiter, wenn ich eine msgbox hinten dran mache kommt die auch.
Habe das Programm schon auf einem anderen PC probiert da läuft es, der einzigste unterschied ich habe auf dem anderen PC wo es läuft vb2010 und auf dem anderen vb2008 wo es nicht läuft wegen Platz mangel (Platz kleiner 1GB), habe die selben Kameras, treiber sind alle ordnungs gemäß Installiert und im Gerätemanager ist alles auf grün.
Funktionieren die AForge Bibliotheken in VB2008?
Hier nochmal mein ganzer Code.

```
Imports AForge.Video
Imports AForge.Video.DirectShow


Public Class Cams
    Private WithEvents CamFlaeche As VideoCaptureDevice


    Private Sub btnCamStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCamStart.Click
        'Alle Kameras suchen und Kamera auf dem Index 0 auf CamFlaeche zuweisen
        CamFlaeche = getVideoCaptureDevice(0)
        'Kamera auf Index 0 auf den VideoSourcePlayer1 zuweisen
        VideoSourcePlayer1.VideoSource = CamFlaeche
        VideoSourcePlayer1.Start()

    End Sub

    Private Sub btnCamStop_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCamStop.Click
        VideoSourcePlayer1.Stop()
    End Sub

    Private Function getVideoCaptureDevice(ByRef Kameranummer As Integer) As VideoCaptureDevice
        'Alle Geräte suchen
        Dim Cam As New FilterInfoCollection(FilterCategory.VideoInputDevice)
        'Entsprechendes Gerät zuweisen
        Return New VideoCaptureDevice(Cam(Kameranummer).MonikerString)
    End Function

    Private Sub Cams_FormClosing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
        VideoSourcePlayer1.Stop()
    End Sub
End Class
```


----------



## wolfi_by (29 Februar 2016)

Hi.
Also wenn's auf einem rechner geht und auf dem anderen nicht kann das durchaus mehrere gründe haben. 
Wie viele Elemente sind denn in diesem videocapturedevice? Gibt's da evtl mehrere, da es sich offenbar um eine liste handelt... Schon mal einen anderen index probiert? Is überall das benötigte .net drauf? Sind es unterschiedliche windowsversionen?
Offenbar gibt's keine fehlermeldung. Deshalb würd ich drauf tippen dass in der variable Cam mehrere Elemente enthalten sind
Gruss


----------

