Eigenes Wecam Prog.
Jeder kennt das Problem: Man will eine Webcam oder einen Video Capture für seine Anwendung verwenden. Aber wie nur ?! In diesem Workshop zeige ich es euch
wie dass ganz einfach geht! Ihr solltet euch mit Visual Basic schon ein bisschen auskennen
Und solltet bei API bescheit wissen.
Also: Zu erst startet ihr mal Visual Basic (is ja klar)
Zieht eine Picture Box auf das Formular, einen Command Botton und einen Frame
Soweit ist das allen klar wen nicht ist dieser Workshop nichts für euch!
Dann fügt ein Modul hinzu. In das Modul kommt folgenden:
'---CODE-----
Option Explicit
'benötigte API- Deklarationen (kann man nicht mehr
'viel zu sagen
Private Declare Function capCreateCaptureWindow Lib "avicap32.dll" _
Alias "capCreateCaptureWindowA" ( _
ByVal lpszWindowName As String, _
ByVal dwStyle As Long, _
ByVal x As Long, _
ByVal y As Long, _
ByVal nWidth As Long, _
ByVal nHeight As Long, _
ByVal hWndParent As Long, _
ByVal nID As Long) As Long
Private Const WS_CHILD = &H40000000
Private Const WS_VISIBLE = &H10000000
Private Const WM_USER = &H400
Private Const WM_CAP_START = &H400
Private Const WM_CAP_EDIT_COPY = (WM_CAP_START + 30)
Private Const WM_CAP_DRIVER_CONNECT = (WM_CAP_START + 10)
Private Const WM_CAP_SET_PREVIEWRATE = (WM_CAP_START + 52)
Private Const WM_CAP_SET_OVERLAY = (WM_CAP_START + 51)
Private Const WM_CAP_SET_PREVIEW = (WM_CAP_START + 50)
Private Const WM_CAP_DRIVER_DISCONNECT = (WM_CAP_START + 11)
' SendMessage Declaration (sollte auch jeder kennen)
Private Declare Function SendMessage Lib "user32" _
Alias "SendMessageA" ( _
ByVal hwnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
lParam As Any) As Long
Private Preview_Handle As Long
'
'Dieser Teil ist SEHR WICHTIG!.Hier wird das Bild
'ausgegeben (auf den Frame)
' Es ist praktisch wie ein Fernseher oder Monitor
'
Public Function CreateCaptureWindow( _
hWndParent As Long, _
Optional x As Long = 0, _
Optional y As Long = 0, _
Optional nWidth As Long = 300, _
Optional nHeight As Long = 240, _
Optional nCameraID As Long = 0) As Long
'Parameter Erklärung: nWidth= Größe der Capture Fensters
'(Breite)
'nHeights= Größe des Capture Windows
'(Höhe)
' nCameraID= Nummer der Webcam (captures)
'Ausgabe Fenster (Capture Window) erstellen
Preview_Handle = capCreateCaptureWindow("Video", _
WS_CHILD + WS_VISIBLE, x, y, _
nWidth, nHeight, hWndParent, 1)
'Verbindung mit der Webcam herstellen
'Kann man an Send message erkennen
SendMessage Preview_Handle, WM_CAP_DRIVER_CONNECT, nCameraID, 0
SendMessage Preview_Handle, WM_CAP_SET_PREVIEWRATE, 30, 0
SendMessage Preview_Handle, WM_CAP_SET_OVERLAY, 1, 0
SendMessage Preview_Handle, WM_CAP_SET_PREVIEW, 1, 0
CreateCaptureWindow = Preview_Handle
End Function
‘Diese Funktion erstellt ein Foto speichert es ab und
' gibt es auf der Picture box aus
'Zur erst Declarationen
Public Sub CapturePicture(nCaptureHandle As Long, _
picCapture As PictureBox)
'Picturebox auf 0 setzten
Clipboard.Clear
'Bild von der Webcam Speicher und dan ausgeben
SendMessage nCaptureHandle, WM_CAP_EDIT_COPY, 0, 0
picCapture.Picture = Clipboard.GetData
End Sub
'Verbindung zum Capture Schließen (sieht man an
'Disconnect
Public Sub Disconnect(nCaptureHandle As Long, _
Optional nCameraID = 0)
'Wieder Send Message: Aber diemal wird die Verbidung mit der Webcam abgebrochen
SendMessage nCaptureHandle, WM_CAP_DRIVER_DISCONNECT, _
nCameraID, 0
End Sub
’-----CODE------
Hat man mehrere Webcams bzw. Video Captures geht man wie folgt vor:
Startet alle Webcams (außer die die ihr verwenden wollt) mit eurem Standart Webcam Programm (vom herstelle der Webcam z.b.) nun startet euer Programm.
Nun wird eine Fehler Meldung erscheinen. Klickt auf OK. Nun öffnet sich ein Fenster wo ihr den Capture (bzw. Webcam) auswählen könnt. Wählt ihn aus und klickt auf OK. Die einstellung wird als Standart übernommen .
Beispiel zum Ausführen
Erst mal den Code:
’----CODE-----
‘Das Webcam Bild in Frame1 ausgeben
Private Sub Form_Load()
Video_Handle = CreateCaptureWindow(Frame1.hwnd)
End Sub
‘Ein Foto schießen und in der Picture Box ausgeben.
Private Sub Command1_Click()
CapturePicture Video_Handle, Picture1
SavePicture Picture1.Picture, "C:Test.bmp"
Schluss
So das war’s! ich hoffe es funzt bei euch genau so gut wie bei mir !
Viel Spaß
|