Hallo Community!
Ich habe hier einen Code gefunden, mit dem es möglich ist die Webcam in einer Picturebox anzeigen zu lassen und anscheinend auch aufzunehmen bzw zu speichern.
Nur ist das Problem das die Speicherung der videos nicht funktioniert. aus dem Speichercode selbst werde ich persönlich nicht wirklich schlau! deswegen frage ich hier um rat.
Es ist daher interessant für mich als das ich das Speicher Schema gerne für ein anderes Projekt übernehmen würde.
Vielen dank im voraus und Liebe Grüße
Zcared
Ich habe hier einen Code gefunden, mit dem es möglich ist die Webcam in einer Picturebox anzeigen zu lassen und anscheinend auch aufzunehmen bzw zu speichern.
Nur ist das Problem das die Speicherung der videos nicht funktioniert. aus dem Speichercode selbst werde ich persönlich nicht wirklich schlau! deswegen frage ich hier um rat.
Es ist daher interessant für mich als das ich das Speicher Schema gerne für ein anderes Projekt übernehmen würde.
VB.NET-Quellcode
- Imports System
- Imports System.IO
- Imports System.Runtime.InteropServices
- Imports Microsoft.Win32
- Public Class Form1
- Inherits System.Windows.Forms.Form
- Const WM_CAP_START = &H400S
- Const WS_CHILD = &H40000000
- Const WS_VISIBLE = &H10000000
- Const WM_CAP_DRIVER_CONNECT = WM_CAP_START + 10
- Const WM_CAP_DRIVER_DISCONNECT = WM_CAP_START + 11
- Const WM_CAP_EDIT_COPY = WM_CAP_START + 30
- Const WM_CAP_SEQUENCE = WM_CAP_START + 62
- Const WM_CAP_FILE_SAVEAS = WM_CAP_START + 23
- Const WM_CAP_SET_SCALE = WM_CAP_START + 53
- Const WM_CAP_SET_PREVIEWRATE = WM_CAP_START + 52
- Const WM_CAP_SET_PREVIEW = WM_CAP_START + 50
- Const SWP_NOMOVE = &H2S
- Const SWP_NOSIZE = 1
- Const SWP_NOZORDER = &H4S
- Const HWND_BOTTOM = 1
- '--The capGetDriverDescription function retrieves the version
- ' description of the capture driver--
- 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
- '--The capCreateCaptureWindow function creates a capture window--
- Declare Function capCreateCaptureWindowA 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 Short, ByVal hWnd As Integer, _
- ByVal nID As Integer) As Integer
- '--This function sends the specified message to a window or windows--
- Declare Function SendMessage Lib"user32"Alias"SendMessageA" _
- (ByVal hwnd As Integer, ByVal Msg As Integer, _
- ByVal wParam As Integer, _
- <MarshalAs(UnmanagedType.AsAny)> ByVal lParam As Object) As Integer
- '--Sets the position of the window relative to the screen buffer--
- Declare Function SetWindowPos Lib"user32"Alias"SetWindowPos" _
- (ByVal hwnd As Integer, _
- ByVal hWndInsertAfter As Integer, ByVal x As Integer, _
- ByVal y As Integer, _
- ByVal cx As Integer, ByVal cy As Integer, _
- ByVal wFlags As Integer) As Integer
- '--This function destroys the specified window--
- Declare Function DestroyWindow Lib"user32" _
- (ByVal hndw As Integer) As Boolean
- '---used to identify the video source---
- Dim CamSource As Integer
- '---used as a window handle---
- Dim hWnd As Integer
- Private Sub cameraSource()
- Dim DriverName As String = Space(80)
- Dim DriverVersion As String = Space(80)
- For i As Integer = 0 To 9
- If capGetDriverDescriptionA(i, DriverName, 80, _
- DriverVersion, 80) Then
- ListBox1.Items.Add(DriverName.Trim)
- End If
- Next
- End Sub
- Private Sub previewCamera(ByVal pbCtrl As PictureBox)
- hWnd = capCreateCaptureWindowA(CamSource, _
- WS_VISIBLE Or WS_CHILD, 0, 0, 0, _
- 0, pbCtrl.Handle.ToInt32, 0)
- If SendMessage( _
- hWnd, WM_CAP_DRIVER_CONNECT, _
- CamSource, 0) Then
- '---set the preview scale---
- SendMessage(hWnd, WM_CAP_SET_SCALE, True, 0)
- '---set the preview rate (ms)---
- SendMessage(hWnd, WM_CAP_SET_PREVIEWRATE, 30, 0)
- '---start previewing the image---
- SendMessage(hWnd, WM_CAP_SET_PREVIEW, True, 0)
- '---resize window to fit in PictureBox control---
- SetWindowPos(hWnd, HWND_BOTTOM, 0, 0, _
- pbCtrl.Width, pbCtrl.Height, _
- SWP_NOMOVE Or SWP_NOZORDER)
- Else
- '--error connecting to video source---
- DestroyWindow(hWnd)
- End If
- End Sub
- Private Sub stopPreviewCamera()
- SendMessage(hWnd, WM_CAP_DRIVER_DISCONNECT, CamSource, 0)
- DestroyWindow(hWnd)
- End Sub
- Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
- cameraSource()
- Button4.Enabled = False
- Button1.Enabled = False
- Button2.Enabled = False
- Button3.Enabled = False
- End Sub
- Private Sub ListBox1_DoubleClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.DoubleClick
- Label1.Visible = False
- previewCamera(PictureBox1)
- Button1.Enabled = True
- Button4.Enabled = False
- Button2.Enabled = True
- End Sub
- Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
- CamSource = ListBox1.SelectedIndex
- '---preview the selected video source
- End Sub
- 'stop preview
- Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
- stopPreviewCamera()
- Button4.Enabled = True
- Button1.Enabled = False
- End Sub
- ' recording
- Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
- Button3.Enabled = True
- Button2.Enabled = False
- SendMessage(hWnd, WM_CAP_SEQUENCE, 0, 0)
- End Sub
- ' stop recording and ask to save video
- Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
- Dim save As Integer
- save = MsgBox("Do you want to save your recording video", MsgBoxStyle.YesNo + MsgBoxStyle.Information, "Recording Video")
- If (save = MsgBoxResult.Yes) Then
- Dim saveName As New SaveFileDialog
- saveName.Filter = "Avi file(*.avi)|*.avi"
- If saveName.ShowDialog = Windows.Forms.DialogResult.OK Then
- ' SendMessage(hWnd, WM_CAP_FILE_SAVEAS, 0, "C:\RecordedVideo.avi")
- SendMessage(hWnd, WM_CAP_FILE_SAVEAS, 0, saveName.FileName)
- End If
- End If
- Me.Cursor = System.Windows.Forms.Cursors.Default
- Button2.Enabled = True
- Button3.Enabled = False
- End Sub
- ' preview
- Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
- CamSource = ListBox1.SelectedIndex
- previewCamera(PictureBox1)
- Button4.Enabled = False
- Button1.Enabled = True
- End Sub
- End Class
Vielen dank im voraus und Liebe Grüße
Zcared