Microsoft LifeCam Studio HD 1080p in Programm einbinden

  • VB.NET

Es gibt 16 Antworten in diesem Thema. Der letzte Beitrag () ist von a.setzer.

    Microsoft LifeCam Studio HD 1080p in Programm einbinden

    Hy alle zusammen,

    Ich habe eine Microsoft LifeCam Studio HD 1080p

    Mit folgendem Code habe ich die Cam im vb.net zum laufen gebracht.
    Das Problem folgt nach dem code, siehe unten..

    VB.NET-Quellcode

    1. Option Explicit On
    2. Option Strict On
    3. 'Beispiel: VB .Net - Webcam ansprechen - Video anzeigen - Aktuelles Bild in die Zwischenablage kopieren und anzeigen.
    4. Public Class Form1
    5. Private w32 As Win32Api
    6. Private Shadows [Handle] As IntPtr
    7. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
    8. Handles Button1.Click
    9. w32 = New Win32Api(PictureBox1.Handle, 352, 287)
    10. [Handle] = w32.GetCaptureHandle
    11. Me.Button1.Enabled = False
    12. If Not [Handle].Equals(IntPtr.Zero) Then
    13. Me.Button3.Enabled = True
    14. Me.Button2.Enabled = True
    15. End If
    16. End Sub
    17. Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) _
    18. Handles Me.FormClosing
    19. w32.MyHandle = [Handle]
    20. If Not [Handle].Equals(IntPtr.Zero) Then
    21. w32.DisposeConnection()
    22. End If
    23. End Sub
    24. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
    25. Handles Button2.Click
    26. w32.MyHandle = [Handle]
    27. If Not [Handle].Equals(IntPtr.Zero) Then
    28. w32.DisposeConnection()
    29. Me.Button1.Enabled = True
    30. Me.Button3.Enabled = False
    31. Me.Button2.Enabled = False
    32. End If
    33. End Sub
    34. Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
    35. Handles Button3.Click
    36. If Not [Handle].Equals(IntPtr.Zero) Then
    37. w32.MyHandle = [Handle]
    38. Dim img As Image = w32.GetImage()
    39. If img IsNot Nothing Then
    40. Me.PictureBox2.Image = img
    41. Else
    42. MessageBox.Show("Es ist ein Fehler aufgetreten.", "Info")
    43. End If
    44. End If
    45. End Sub
    46. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _
    47. Handles MyBase.Load
    48. Me.Button3.Enabled = False
    49. End Sub
    50. Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
    51. Handles Button4.Click
    52. Dim sfd As SaveFileDialog = New SaveFileDialog()
    53. With sfd
    54. .Title = "Grafik speichern..."
    55. .RestoreDirectory = True
    56. .InitialDirectory = Application.StartupPath
    57. .Filter = "Jpeg (*.jpg)|*.jpg"
    58. If .ShowDialog = Windows.Forms.DialogResult.OK Then
    59. Dim sitf As SaveImageToFile = New SaveImageToFile(.FileName, Me.PictureBox2.Image)
    60. With sitf
    61. Dim Result As Boolean = .SaveImage()
    62. Select Case Result
    63. Case True
    64. MessageBox.Show("Datei wurde gespeichert.", "Info")
    65. Case Else
    66. MessageBox.Show("Datei konnte nicht gespeichert werden.", "Info")
    67. End Select
    68. End With
    69. Else
    70. MessageBox.Show("Abbruch...", "Info")
    71. End If
    72. End With
    73. End Sub
    74. Public Class SaveImageToFile
    75. Private _filename As String
    76. Private _img As Image
    77. Public Sub New(ByVal Filename As String, ByVal img As Image)
    78. If Not String.IsNullOrEmpty(Filename) Then
    79. Me._filename = Filename
    80. If img IsNot Nothing Then
    81. Me._img = img
    82. Else
    83. Return
    84. End If
    85. Else
    86. Return
    87. End If
    88. End Sub
    89. Public Function SaveImage() As Boolean
    90. Try
    91. Dim hBitmap As Bitmap = New Bitmap(Me._img)
    92. hBitmap.Save(Me._filename, Imaging.ImageFormat.Jpeg)
    93. If IO.File.Exists(Me._filename) Then
    94. Return True
    95. Else
    96. Return False
    97. End If
    98. Catch ex As Exception
    99. MessageBox.Show(ex.Message.ToString(), "Info")
    100. End Try
    101. Return False
    102. End Function
    103. End Class
    104. End Class
    105. Public Class Win32Api
    106. #Region "Api Functions"
    107. Private Declare Auto Function capCreateCaptureWindow Lib "avicap32.dll" ( _
    108. ByVal lpszWindowName As String, _
    109. ByVal dwStyle As Integer, _
    110. ByVal x As Integer, _
    111. ByVal y As Integer, _
    112. ByVal nWidth As Integer, _
    113. ByVal nHeight As Integer, _
    114. ByVal hWnd As IntPtr, _
    115. ByVal nID As Integer) _
    116. As IntPtr
    117. Private Declare Auto Function SendMessage Lib "user32.dll" ( _
    118. ByVal hwnd As IntPtr, _
    119. ByVal uMsg As Integer, _
    120. ByVal wParam As Integer, _
    121. ByVal lParam As Integer) _
    122. As Integer
    123. #End Region
    124. #Region "Constants"
    125. Private Const WM_USER As Int32 = &H400
    126. Private Const WS_CHILD As Integer = &H40000000
    127. Private Const WS_VISIBLE As Integer = &H10000000
    128. Private Const WM_CAP_START As Integer = WM_USER
    129. Private Const WM_CAP_DRIVER_CONNECT As Integer = (WM_CAP_START + 10)
    130. Private Const WM_CAP_SET_PREVIEWRATE As Integer = (WM_CAP_START + 52)
    131. Private Const WM_CAP_SET_OVERLAY As Integer = (WM_CAP_START + 51)
    132. Private Const WM_CAP_SET_PREVIEW As Integer = (WM_CAP_START + 50)
    133. Private Const WM_CAP_DRIVER_DISCONNECT As Integer = (WM_CAP_START + 11)
    134. Private Const WM_CAP_EDIT_COPY As Integer = (WM_CAP_START + 30)
    135. #End Region
    136. #Region "Private"
    137. Private _hwnd As IntPtr
    138. Private _width As Integer
    139. Private _height As Integer
    140. #End Region
    141. #Region "Camera Id"
    142. Private Const CameraId As Integer = 0
    143. #End Region
    144. #Region "Frames"
    145. Private Const Frames As Integer = 24
    146. #End Region
    147. #Region "Positions"
    148. Private x As Integer = 0
    149. Private y As Integer = 0
    150. #End Region
    151. #Region "Public"
    152. Public MyHandle As IntPtr
    153. #End Region
    154. #Region "Constructor"
    155. Public Sub New(ByVal hWnd As IntPtr, ByVal Width As Integer, ByVal Height As Integer)
    156. If Not hWnd.Equals(IntPtr.Zero) Then
    157. Me._hwnd = hWnd
    158. Me._width = 640 : Me._height = 480
    159. Return
    160. End If
    161. End Sub
    162. #End Region
    163. #Region "Functions"
    164. Public Function GetCaptureHandle() As IntPtr
    165. Dim [Handle] As IntPtr = Win32Api.capCreateCaptureWindow("CaptureWindow", _
    166. Win32Api.WS_CHILD + Win32Api.WS_VISIBLE, _
    167. x, y, _
    168. Me._width, Me._height, _
    169. Me._hwnd, _
    170. Win32Api.CameraId)
    171. SendMessage([Handle], Win32Api.WM_CAP_DRIVER_CONNECT, Win32Api.CameraId, 0)
    172. SendMessage([Handle], Win32Api.WM_CAP_SET_PREVIEWRATE, Win32Api.Frames, 0)
    173. SendMessage([Handle], Win32Api.WM_CAP_SET_OVERLAY, 1, 0)
    174. SendMessage([Handle], Win32Api.WM_CAP_SET_PREVIEW, 1, 0)
    175. If Not [Handle].Equals(IntPtr.Zero) Then
    176. Return [Handle]
    177. Else
    178. Return IntPtr.Zero
    179. End If
    180. End Function
    181. Public ReadOnly Property GetImage() As Drawing.Image
    182. Get
    183. Return Me.SetCurrentImageToClipBoard()
    184. End Get
    185. End Property
    186. Private Function SetCurrentImageToClipBoard() As Drawing.Image
    187. Try
    188. My.Computer.Clipboard.Clear()
    189. SendMessage(Me.SetHandle(), Win32Api.WM_CAP_EDIT_COPY, 0, 0)
    190. Dim img As Image = My.Computer.Clipboard.GetImage
    191. If img IsNot Nothing Then
    192. Return img
    193. Else
    194. Return Nothing
    195. End If
    196. Catch
    197. Return Nothing
    198. End Try
    199. End Function
    200. Public Property SetHandle() As IntPtr
    201. Get
    202. Return MyHandle
    203. End Get
    204. Set(ByVal value As IntPtr)
    205. MyHandle = value
    206. End Set
    207. End Property
    208. Public Sub DisposeConnection()
    209. Dim result As Integer = SendMessage(Me.SetHandle(), Win32Api.WM_CAP_DRIVER_DISCONNECT, Win32Api.CameraId, 0)
    210. Debug.WriteLine("Disconnected: " & result.ToString())
    211. End Sub
    212. #End Region
    213. End Class



    Ich habe im Anhang ein Bild angehängt, wo mein problem zu sehen ist.
    - In der Originalen Sofware ist das Bild größer und in einer besseren Quali, wenn ich es abspeicher hat es 3MB
    - Im vb.net Code ist das Bild weeeesentlich kleiner und hat eine schlechte Quali, wenn ich es abspeicher hat es knapp 300kb
    1.Was muss am Code verändert werden?
    2.Wie muss die PictureBox bearbeitet werden, das das KameraBild immer voll abgebildet wird, egal wie klein die PictureBox ist?

    Viiiielen Dank im voraus
    gruß
    Bilder
    • Bild1.png

      572,62 kB, 1.163×415, 533 mal angesehen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „a.setzer“ ()

    du solltest sie erhöhen, dadurch solte sich schonmal die auflösung ändern. z.b.1920,1080 währe hd

    edit:

    sehe grade unten sind die werte anscheinend fest gesetzt:

    VB.NET-Quellcode

    1. Me._width = 640 : Me._height = 480


    änder die zeile mal zu

    VB.NET-Quellcode

    1. Me._width = Width : Me._height = height
    Soweit ich weiss liegt es nicht an deinem Code, sondern an der Art und Weise wie du auf die Kamera zugreifst.
    Die avicap32.dll mag zwar die einfachste Lösung sein auf die Webcam zuzugreifen, bekommst aber nur eine max. Auflösung von 640*480 Pixel von der Cam.

    Da bringt es auch nichts das Bild künstlich hoch zu rendern.

    Versuche mal auf die Kamera über DirectShow zuzugreifen.
    codeproject.com/KB/audio-video/WebcamUsingDirectShowNET.aspx
    Ja, dieses Projekt habe ich bereits downgeloadet, jedoch erhalte ich mit VisualStudio2010 beim erstellen sämtliche Fehlermeldungen,
    an was kann dies liegen?

    Warnung 1 Dieser Verweis konnte nicht aufgelöst werden. Die DirectShowLib-Assembly wurde nicht gefunden. Stellen Sie sicher, dass die Assembly auf dem Datenträger vorhanden ist. Falls dieser Verweis im Code erforderlich ist, können Kompilierungsfehler auftreten. Capture2
    Warnung 2 Dieser Verweis konnte nicht aufgelöst werden. Die DirectShowLib-2005-Assembly wurde nicht gefunden. Stellen Sie sicher, dass die Assembly auf dem Datenträger vorhanden ist. Falls dieser Verweis im Code erforderlich ist, können Kompilierungsfehler auftreten. Capture2
    Warnung 3 Die Komponente "DirectShowLib", auf die verwiesen wird, wurde nicht gefunden.
    Warnung 4 Die Komponente "DirectShowLib-2005", auf die verwiesen wird, wurde nicht gefunden.
    Warnung 5 Der in Imports "DirectShowLib" angegebene Namespace oder Typ enthält keine öffentlichen Member oder kann nicht gefunden werden. Stellen Sie sicher, dass der Namespace oder der Typ definiert ist und mindestens einen öffentlichen Member enthält und dass der importierte Elementname keine weiteren Aliase enthält. C:\Users\asetzer\Downloads\Capture2\Capture2\Form1.vb 6 9 Capture2
    Fehler 6 Der Typ "IVideoWindow" ist nicht definiert. C:\Users\asetzer\Downloads\Capture2\Capture2\Form1.vb 23 28 Capture2
    Fehler 7 Der Typ "IMediaControl" ist nicht definiert. C:\Users\asetzer\Downloads\Capture2\Capture2\Form1.vb 24 29 Capture2
    Fehler 8 Der Typ "IMediaEventEx" ist nicht definiert. C:\Users\asetzer\Downloads\Capture2\Capture2\Form1.vb 25 29 Capture2
    Fehler 9 Der Typ "IGraphBuilder" ist nicht definiert. C:\Users\asetzer\Downloads\Capture2\Capture2\Form1.vb 26 29 Capture2
    Fehler 10 Der Typ "ICaptureGraphBuilder2" ist nicht definiert. C:\Users\asetzer\Downloads\Capture2\Capture2\Form1.vb 27 36 Capture2
    Fehler 11 Der Typ "DsROTEntry" ist nicht definiert. C:\Users\asetzer\Downloads\Capture2\Capture2\Form1.vb 29 20 Capture2
    Fehler 12 Der Typ "IBaseFilter" ist nicht definiert. C:\Users\asetzer\Downloads\Capture2\Capture2\Form1.vb 50 33 Capture2
    Fehler 13 "DsError" wurde nicht deklariert. Auf das Objekt kann aufgrund seiner Schutzstufe möglicherweise nicht zugegriffen werden. C:\Users\asetzer\Downloads\Capture2\Capture2\Form1.vb 55 85 Capture2
    Fehler 14 "DsError" wurde nicht deklariert. Auf das Objekt kann aufgrund seiner Schutzstufe möglicherweise nicht zugegriffen werden. C:\Users\asetzer\Downloads\Capture2\Capture2\Form1.vb 56 17 Capture2
    Fehler 15 "DsError" wurde nicht deklariert. Auf das Objekt kann aufgrund seiner Schutzstufe möglicherweise nicht zugegriffen werden. C:\Users\asetzer\Downloads\Capture2\Capture2\Form1.vb 61 72 Capture2
    Fehler 16 "DsError" wurde nicht deklariert. Auf das Objekt kann aufgrund seiner Schutzstufe möglicherweise nicht zugegriffen werden. C:\Users\asetzer\Downloads\Capture2\Capture2\Form1.vb 62 17 Capture2
    Fehler 17 "PinCategory" wurde nicht deklariert. Auf das Objekt kann aufgrund seiner Schutzstufe möglicherweise nicht zugegriffen werden. C:\Users\asetzer\Downloads\Capture2\Capture2\Form1.vb 64 58 Capture2
    Fehler 18 "MediaType" wurde nicht deklariert. Auf das Objekt kann aufgrund seiner Schutzstufe möglicherweise nicht zugegriffen werden. C:\Users\asetzer\Downloads\Capture2\Capture2\Form1.vb 64 79 Capture2
    Fehler 19 "DsError" wurde nicht deklariert. Auf das Objekt kann aufgrund seiner Schutzstufe möglicherweise nicht zugegriffen werden. C:\Users\asetzer\Downloads\Capture2\Capture2\Form1.vb 65 91 Capture2
    Fehler 20 "DsError" wurde nicht deklariert. Auf das Objekt kann aufgrund seiner Schutzstufe möglicherweise nicht zugegriffen werden. C:\Users\asetzer\Downloads\Capture2\Capture2\Form1.vb 66 17 Capture2
    Fehler 21 Der Typ "DsROTEntry" ist nicht definiert. C:\Users\asetzer\Downloads\Capture2\Capture2\Form1.vb 72 27 Capture2
    Fehler 22 "DsError" wurde nicht deklariert. Auf das Objekt kann aufgrund seiner Schutzstufe möglicherweise nicht zugegriffen werden. C:\Users\asetzer\Downloads\Capture2\Capture2\Form1.vb 75 68 Capture2
    Fehler 23 "DsError" wurde nicht deklariert. Auf das Objekt kann aufgrund seiner Schutzstufe möglicherweise nicht zugegriffen werden. C:\Users\asetzer\Downloads\Capture2\Capture2\Form1.vb 76 17 Capture2
    Fehler 24 Der Typ "FilterGraph" ist nicht definiert. C:\Users\asetzer\Downloads\Capture2\Capture2\Form1.vb 88 41 Capture2
    Fehler 25 Der Typ "IGraphBuilder" ist nicht definiert. C:\Users\asetzer\Downloads\Capture2\Capture2\Form1.vb 88 54 Capture2
    Fehler 26 Der Typ "CaptureGraphBuilder2" ist nicht definiert. C:\Users\asetzer\Downloads\Capture2\Capture2\Form1.vb 89 48 Capture2
    Fehler 27 Der Typ "ICaptureGraphBuilder2" ist nicht definiert. C:\Users\asetzer\Downloads\Capture2\Capture2\Form1.vb 89 70 Capture2
    Fehler 28 Der Typ "IMediaControl" ist nicht definiert. C:\Users\asetzer\Downloads\Capture2\Capture2\Form1.vb 90 54 Capture2
    Fehler 29 Der Typ "IVideoWindow" ist nicht definiert. C:\Users\asetzer\Downloads\Capture2\Capture2\Form1.vb 91 53 Capture2
    Fehler 30 Der Typ "IMediaEventEx" ist nicht definiert. C:\Users\asetzer\Downloads\Capture2\Capture2\Form1.vb 92 54 Capture2
    Fehler 31 "DsError" wurde nicht deklariert. Auf das Objekt kann aufgrund seiner Schutzstufe möglicherweise nicht zugegriffen werden. C:\Users\asetzer\Downloads\Capture2\Capture2\Form1.vb 94 13 Capture2
    Fehler 32 "DsError" wurde nicht deklariert. Auf das Objekt kann aufgrund seiner Schutzstufe möglicherweise nicht zugegriffen werden. C:\Users\asetzer\Downloads\Capture2\Capture2\Form1.vb 95 81 Capture2
    Fehler 33 Der Typ "IBaseFilter" ist nicht definiert. C:\Users\asetzer\Downloads\Capture2\Capture2\Form1.vb 97 48 Capture2
    Fehler 34 Der Typ "ICreateDevEnum" ist nicht definiert. C:\Users\asetzer\Downloads\Capture2\Capture2\Form1.vb 103 28 Capture2
    Fehler 35 "FilterCategory" wurde nicht deklariert. Auf das Objekt kann aufgrund seiner Schutzstufe möglicherweise nicht zugegriffen werden. C:\Users\asetzer\Downloads\Capture2\Capture2\Form1.vb 104 48 Capture2
    Fehler 36 "DsError" wurde nicht deklariert. Auf das Objekt kann aufgrund seiner Schutzstufe möglicherweise nicht zugegriffen werden. C:\Users\asetzer\Downloads\Capture2\Capture2\Form1.vb 105 87 Capture2
    Fehler 37 "DsError" wurde nicht deklariert. Auf das Objekt kann aufgrund seiner Schutzstufe möglicherweise nicht zugegriffen werden. C:\Users\asetzer\Downloads\Capture2\Capture2\Form1.vb 106 13 Capture2
    Fehler 38 Der Typ "IBaseFilter" ist nicht definiert. C:\Users\asetzer\Downloads\Capture2\Capture2\Form1.vb 114 43 Capture2
    Fehler 39 Der Typ "IBaseFilter" ist nicht definiert. C:\Users\asetzer\Downloads\Capture2\Capture2\Form1.vb 121 34 Capture2
    Fehler 40 "DsError" wurde nicht deklariert. Auf das Objekt kann aufgrund seiner Schutzstufe möglicherweise nicht zugegriffen werden. C:\Users\asetzer\Downloads\Capture2\Capture2\Form1.vb 128 13 Capture2
    Fehler 41 "System.Windows.Forms.Control.Friend Property WindowStyle As Integer" ist in diesem Kontext nicht zugreifbar, da es "Friend" ist. C:\Users\asetzer\Downloads\Capture2\Capture2\Form1.vb 130 49 Capture2
    Fehler 42 "System.Windows.Forms.Control.Friend Property WindowStyle As Integer" ist in diesem Kontext nicht zugreifbar, da es "Friend" ist. C:\Users\asetzer\Downloads\Capture2\Capture2\Form1.vb 130 70 Capture2
    Fehler 43 "DsError" wurde nicht deklariert. Auf das Objekt kann aufgrund seiner Schutzstufe möglicherweise nicht zugegriffen werden. C:\Users\asetzer\Downloads\Capture2\Capture2\Form1.vb 131 13 Capture2
    Fehler 44 "OABool" wurde nicht deklariert. Auf das Objekt kann aufgrund seiner Schutzstufe möglicherweise nicht zugegriffen werden. C:\Users\asetzer\Downloads\Capture2\Capture2\Form1.vb 138 45 Capture2
    Fehler 45 "DsError" wurde nicht deklariert. Auf das Objekt kann aufgrund seiner Schutzstufe möglicherweise nicht zugegriffen werden. C:\Users\asetzer\Downloads\Capture2\Capture2\Form1.vb 139 13 Capture2
    Fehler 46 Der Typ "EventCode" ist nicht definiert. C:\Users\asetzer\Downloads\Capture2\Capture2\Form1.vb 154 27 Capture2
    Fehler 47 "DsError" wurde nicht deklariert. Auf das Objekt kann aufgrund seiner Schutzstufe möglicherweise nicht zugegriffen werden. C:\Users\asetzer\Downloads\Capture2\Capture2\Form1.vb 165 17 Capture2
    Fehler 48 "OABool" wurde nicht deklariert. Auf das Objekt kann aufgrund seiner Schutzstufe möglicherweise nicht zugegriffen werden. C:\Users\asetzer\Downloads\Capture2\Capture2\Form1.vb 196 44 Capture2
    So nochmal Hallo zusammen.

    In Bezug auf Post#1 habe ich immernoch das Problem, das ich mit dem Code das Bild nicht komplett draufbekomme,
    mit der Microsoft Software jedoch schon, siehe Unterscheid im Bild auf Post#1
    an was kann das liegen?

    Bitte um Hilfe.
    sourceforge.net/projects/direc…tShowLibV2-1.zip/download

    Die DirectShowLib
    lad die mal runter, entfern den orginalen Verweis auf DirectShow.Dll und setz nen neuen auf die dll.
    Always code as if the person who ends up maintaining your code is a violent psychopath who knows where you live.

    BeryJu.org BeryJu.org/Blog
    ich kanns aber nicht testen - keine webcam

    Edit: Anhang
    Dateien
    Always code as if the person who ends up maintaining your code is a violent psychopath who knows where you live.

    BeryJu.org BeryJu.org/Blog

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „JensMan“ ()