IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Vb.net et la webcam(dshowNet)


Sujet :

VB.NET

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    661
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2006
    Messages : 661
    Points : 244
    Points
    244
    Par défaut Vb.net et la webcam(dshowNet)
    Bonjour j ai une application qui géré la webcam(capture d'image) a partir du flux vidéo direct x

    Voici le code:

    form1.vb

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
     
     
    Imports DirectX.Capture
    Imports System.Drawing
    Imports System.Drawing.Imaging
     
    Public Class Form1
        Inherits System.Windows.Forms.Form
     
     
    #Region " Code généré par le Concepteur Windows Form "
     
        Public Sub New()
            MyBase.New()
     
            'Cet appel est requis par le Concepteur Windows Form.
            InitializeComponent()
     
            'Ajoutez une initialisation quelconque après l'appel InitializeComponent()
     
        End Sub
     
        'La méthode substituée Dispose du formulaire pour nettoyer la liste des composants.
        Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
            If disposing Then
                If Not (components Is Nothing) Then
                    components.Dispose()
                End If
            End If
            MyBase.Dispose(disposing)
        End Sub
     
        'Requis par le Concepteur Windows Form
        Private components As System.ComponentModel.IContainer
     
        'REMARQUE*: la procédure suivante est requise par le Concepteur Windows Form
        'Elle peut être modifiée en utilisant le Concepteur Windows Form.  
        'Ne la modifiez pas en utilisant l'éditeur de code.
        Friend WithEvents Button1 As System.Windows.Forms.Button
        Friend WithEvents ComboBox1 As System.Windows.Forms.ComboBox
        Friend WithEvents ComboBox2 As System.Windows.Forms.ComboBox
        Friend WithEvents PicCam As System.Windows.Forms.PictureBox
        Friend WithEvents CmdCapture As System.Windows.Forms.Button
        Friend WithEvents PicCapture As System.Windows.Forms.PictureBox
        <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
            Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(Form1))
            Me.Button1 = New System.Windows.Forms.Button
            Me.PicCapture = New System.Windows.Forms.PictureBox
            Me.ComboBox1 = New System.Windows.Forms.ComboBox
            Me.ComboBox2 = New System.Windows.Forms.ComboBox
            Me.PicCam = New System.Windows.Forms.PictureBox
            Me.CmdCapture = New System.Windows.Forms.Button
            CType(Me.PicCapture, System.ComponentModel.ISupportInitialize).BeginInit()
            CType(Me.PicCam, System.ComponentModel.ISupportInitialize).BeginInit()
            Me.SuspendLayout()
            '
            'Button1
            '
            Me.Button1.Location = New System.Drawing.Point(16, 379)
            Me.Button1.Name = "Button1"
            Me.Button1.Size = New System.Drawing.Size(75, 23)
            Me.Button1.TabIndex = 1
            Me.Button1.Text = "Valider la configuration"
            Me.Button1.Visible = False
            '
            'PicCapture
            '
            Me.PicCapture.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle
            Me.PicCapture.Location = New System.Drawing.Point(443, 327)
            Me.PicCapture.Name = "PicCapture"
            Me.PicCapture.Size = New System.Drawing.Size(111, 90)
            Me.PicCapture.TabIndex = 7
            Me.PicCapture.TabStop = False
            Me.PicCapture.Visible = False
            '
            'ComboBox1
            '
            Me.ComboBox1.FormattingEnabled = True
            Me.ComboBox1.Location = New System.Drawing.Point(16, 327)
            Me.ComboBox1.Name = "ComboBox1"
            Me.ComboBox1.Size = New System.Drawing.Size(76, 21)
            Me.ComboBox1.TabIndex = 9
            Me.ComboBox1.Visible = False
            '
            'ComboBox2
            '
            Me.ComboBox2.FormattingEnabled = True
            Me.ComboBox2.Location = New System.Drawing.Point(16, 354)
            Me.ComboBox2.Name = "ComboBox2"
            Me.ComboBox2.Size = New System.Drawing.Size(75, 21)
            Me.ComboBox2.TabIndex = 10
            Me.ComboBox2.Visible = False
            '
            'PicCam
            '
            Me.PicCam.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle
            Me.PicCam.Location = New System.Drawing.Point(12, 12)
            Me.PicCam.Name = "PicCam"
            Me.PicCam.Size = New System.Drawing.Size(489, 398)
            Me.PicCam.TabIndex = 12
            Me.PicCam.TabStop = False
            '
            'CmdCapture
            '
            Me.CmdCapture.Font = New System.Drawing.Font("Microsoft Sans Serif", 12.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
            Me.CmdCapture.Image = CType(resources.GetObject("CmdCapture.Image"), System.Drawing.Image)
            Me.CmdCapture.Location = New System.Drawing.Point(517, 11)
            Me.CmdCapture.Name = "CmdCapture"
            Me.CmdCapture.Size = New System.Drawing.Size(142, 405)
            Me.CmdCapture.TabIndex = 11
            '
            'Form1
            '
            Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
            Me.BackColor = System.Drawing.Color.FromArgb(CType(CType(225, Byte), Integer), CType(CType(233, Byte), Integer), CType(CType(241, Byte), Integer))
            Me.ClientSize = New System.Drawing.Size(677, 428)
            Me.Controls.Add(Me.CmdCapture)
            Me.Controls.Add(Me.ComboBox2)
            Me.Controls.Add(Me.ComboBox1)
            Me.Controls.Add(Me.PicCapture)
            Me.Controls.Add(Me.Button1)
            Me.Controls.Add(Me.PicCam)
            Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon)
            Me.MaximizeBox = False
            Me.MinimizeBox = False
            Me.Name = "Form1"
            Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen
            Me.Text = "PRENDRE UNE PHOTO"
            CType(Me.PicCapture, System.ComponentModel.ISupportInitialize).EndInit()
            CType(Me.PicCam, System.ComponentModel.ISupportInitialize).EndInit()
            Me.ResumeLayout(False)
     
        End Sub
     
    #End Region
     
        Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Dim j As Short
            Dim f As Filter
            Try
                'listage des peripheriques video installés sur la machine
                ComboBox1.Items.Clear()
                For j = 0 To Dispositivos.VideoInputDevices.Count - 1
                    f = Dispositivos.VideoInputDevices(j)
                    ComboBox1.Items.Add(f.Name)
                Next
                If j > 0 Then ComboBox1.SelectedIndex = 0
     
                'listage des peripheriques audio installés sur la machine
                ComboBox2.Items.Clear()
                For j = 0 To Dispositivos.AudioInputDevices.Count - 1
                    f = Dispositivos.AudioInputDevices(j)
                    ComboBox2.Items.Add(f.Name)
                Next
                If j > 0 Then ComboBox2.SelectedIndex = 0
     
     
                'pre configuration du capturing
                'definission de la camera
                CaptureInformation2.Camera = Dispositivos.VideoInputDevices(ComboBox1.SelectedIndex)
                'mise en place du stream video et audio
                CaptureInformation2.CaptureInfo = New DirectX.Capture.Capture(CaptureInformation2.Camera, Dispositivos.AudioInputDevices(ComboBox2.SelectedIndex))
                'renseignement du panneau d'affichage de la video
                CaptureInformation2.CaptureInfo.PreviewWindow = PicCam
                'compteur pour les capture d'image (frame video)
                CaptureInformation2.Counter = 1
                CaptureInformation2.CounterFrames = 1
                'configurations avancées
                Configurer()
                'pour faire plus joli
                Button1.Enabled = False
                'pour la gestion evennementiel de la capture d'ecran je cree un gestionnaire d evennement sur Framecapturecomplete
                AddHandler CaptureInformation2.CaptureInfo.FrameCaptureComplete, AddressOf NewCaptureReady
            Catch ex As Exception
                MsgBox(ex.Message)
                End
            End Try
     
        End Sub
     
        Private Sub Configurer()
            Try
                'configurations avancées
                'configuration du systeme de compression video et audio
                CaptureInformation2.CaptureInfo.VideoCompressor = Dispositivos.VideoCompressors(1) 'compression video
                'taille de la video
                CaptureInformation2.CaptureInfo.FrameSize = New Size(320, 240) 'taille de la video
                'FPS de la video
                CaptureInformation2.CaptureInfo.FrameRate = 50 'FPS
                'fichier .avi
                ''CaptureInformation.CaptureInfo.Filename = Application.StartupPath + "\essai.avi"
                'lancement du streaming d'affichage
                CaptureInformation2.CaptureInfo.RenderPreview()
            Catch ex As Exception
                MsgBox(ex.Message)
                End
            End Try
        End Sub
     
        Private Sub NewCaptureReady(ByVal Sender As System.Windows.Forms.PictureBox)
            'appele par le gestionnaire de handler sur l'evennement "FrameCapture
            'ma picture capturé est arrivée...
     
            Dim la As PictureBox = CType(Sender, PictureBox) 'la je converti mon picturebox en picturebox...je sais pas pourquoi, fo le faire sinom ca marche pas
     
            Try
                PicCapture.Image = la.Image 'j affecte ma capture d'image a mon picturebox qui attend que ca.
            Catch ex As Exception
                MsgBox(ex.Message)
                End
            End Try
        End Sub
     
        Sub Tue(ByVal Chem As String)
            Try
                My.Computer.FileSystem.DeleteFile(Chem)
            Catch ex As Exception
                'rien
            End Try
        End Sub
     
        Private Sub CmdCapture_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CmdCapture.Click
            Try
                'demande une capture DirectX ...et lorsqu'elle est ready je la recoit par le Handler cree un peut plus haut
                CaptureInformation2.CaptureInfo.CaptureFrame()
     
                Tue(System.AppDomain.CurrentDomain.BaseDirectory() & "WCcapture.jpg")
     
                Do While PicCapture.Image Is Nothing
                    Application.DoEvents()
                Loop
                PicCapture.Image.Save(System.AppDomain.CurrentDomain.BaseDirectory() & "WCcapture.jpg", System.Drawing.Imaging.ImageFormat.Jpeg)
            Catch ex As Exception
                MsgBox(ex.Message.ToString, MsgBoxStyle.Critical, "impossible d'enregister l'image")
            End Try
     
            End
        End Sub
    End Class
    ModCap.vb

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
     
    Option Strict On
    Option Explicit On 
     
    Imports DirectX.Capture
    Imports System
    Imports System.IO
     
    Module ModCap
     
     
        Public Structure Active2
            Dim Camera As Filter
            Dim CaptureInfo As DirectX.Capture.Capture '' l'ancienne declaration etait Dim CaptureInfo as Capture
            Dim Counter As Integer
            Dim CounterFrames As Integer
            Dim PathVideo As String
        End Structure
     
        'le streaming en cours
        Public CaptureInformation2 As Active2
        'le filtre en cours
        Public Dispositivos As New Filters()
     
    End Module
    Si j'utilise le programme sur un pc qui a une webcam tout va bien, mais une fois que je le met sur un pc sans webcam j'ai un problème au niveau du

    Public Dispositivos As New Filters() qui se trouve dans le module.

    Je voudrais pouvoir mettre le programme sur un pc qui n'a pas de webcam sans que le programme plante.

    Je voudrais pouvoir détecter si une webcam est branché ou pas sur le pc

    Merci d'avance

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    661
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2006
    Messages : 661
    Points : 244
    Points
    244
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    #Region "########################################""FONCTION ET PROCEDURE##################################################"
        ''' <summary>
        ''' FONCTION: RECUPERE LA DESCRIPTION DE LA VERSION DU PILOTE
        ''' </summary>
        ''' <param name="wDriverIndex"></param>
        ''' <param name="lpszName"></param>
        ''' <param name="cbName"></param>
        ''' <param name="lpszVer"></param>
        ''' <param name="cbVer"></param>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Declare Function capGetDriverDescriptionA Lib "avicap32.dll" _
           (ByVal wDriverIndex As Short, _
            ByVal lpszName As String, ByVal cbName As Integer, ByVal lpszVer As String, _
            ByVal cbVer As Integer) As Boolean
        ''' <summary>
        ''' PROCEDURE: POUR DETECTER LA WEBCAM
        ''' </summary>
        ''' <remarks></remarks>
        Private Sub PROC_DETECTE_WEBCAM()
            Dim DriverName As String = Space(80)
            Dim DriverVersion As String = Space(80)
     
            If capGetDriverDescriptionA(0, DriverName, 80, DriverVersion, 80) = False Then
                MsgBox("Aucune webcam n'est détectée. " & Chr(13) & "Vous devez connecter une webcam pour pouvoir utiliser le programme. ", vbInformation, "Message")
                End
            End If
        End Sub
    #End Region

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VB.NET]Capture Webcam WIA
    Par shinji_rem dans le forum Windows Forms
    Réponses: 11
    Dernier message: 03/08/2012, 13h13
  2. Réponses: 5
    Dernier message: 29/03/2010, 10h05
  3. Webcam et .NET
    Par The eye dans le forum Général Dotnet
    Réponses: 5
    Dernier message: 30/12/2008, 09h42
  4. [VB.NET]Récupération image webcam
    Par krfa1 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 03/10/2006, 06h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo