@Stefan
Da, koristi clipboard :) ... sto bi Aleksandar rekao bespotreban post ...
Malo sam prelistao MSDN (imam staru na laptopu, za VS6)
Ovako
Ovi koji u VB-u kopiraju frem u Clipboard obicno to rade zato sto im frem treba kao dib (za neku obradu i sl.) ili zato sto im je tako jednostavnije.
Frem moze da se direktno iscrta u prozoru (ispod imas kod koji ne koristi clipboard) a ako ti treba dib koristi neki kod za kopiranje grafike sa prozora u memoriju.
Prozor u kom drajver iscrtava sliku je prozor koji je kreiran capCreateCaptureWindow funkcijom i on je child u odnosu na glavnu formu.
Ove konstante sam kopirao iz C++ header-a , nema ih u VB APIViewer-u
Stavi Timer1 timer na formu i kopiraj ovo ispod
poz
Code:
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_CAP_START = &H400
Private Const WM_CAP_UNICODE_START = WM_CAP_START + 100
Private Const WM_CAP_DRIVER_CONNECT = WM_CAP_START + 10 'konektovanje drajvera
Private Const WM_CAP_DRIVER_DISCONNECT = WM_CAP_START + 11 ' diskonektovanje drajvera
Private Const WM_CAP_GRAB_FRAME = WM_CAP_START + 60 ' uzimanje frema
Private Const WM_CAP_GRAB_FRAME_NOSTOP = WM_CAP_START + 61 ' uzimanje frema bez zaustavljanja
Private Const WM_CAP_EDIT_COPY = WM_CAP_START + 30 ' WinMsg za kopiranje frema u clipboard
Private Const WM_CAP_FILE_SAVEDIB = WM_CAP_UNICODE_START + 25 'WinMsg za snimanje frema u fajl
Private hCam As Long ' hWnd za child window (za kameru)
Private Sub Form_Load()
Timer1.Enabled = False 'timer za fremove
Me.Width = 645 * Screen.TwipsPerPixelX
Me.Height = 500 * Screen.TwipsPerPixelY
Me.Caption = "WebCam"
'WS_CHILD Or WS_VISIBLE sluzi da window kamere bude child ove forme i vidljiv
'sledeca 4 parametra su pozicija x,y i sirina i visina, onda ide hwnd ovog pozora i ID koji window dobija (moze da bude 0)
hCam = capCreateCaptureWindow("MyCamWindow", WS_CHILD Or WS_VISIBLE, 0, 0, 640, 480, Me.hwnd, 0) 'kreiranje prozora za snimanje
SendMessage hCam, WM_CAP_DRIVER_CONNECT, 0, 0 'konektovanje drajvera
Timer1.Interval = 40 ' namestamo timer na 25 puta po sekundi
Timer1.Enabled = True ' i ukljucujemo ga
End Sub
Private Sub Form_Unload(Cancel As Integer)
SendMessage hCam, WM_CAP_DRIVER_DISCONNECT, 0, 0 ' diskonektovanje drajvera
End Sub
Private Sub Timer1_Timer()
SendMessage hCam, WM_CAP_GRAB_FRAME_NOSTOP, 0, 0 ' ova WinMsg iscrtava sliku u hCam prozoru
End Sub