Oppure

Loading
26/08/09 11:41
ddemarch
Salve,
ho utilizzato il seguente codice per acquisire immagini da webcam e vedo il live

in un modulo:
        
Global Const ws_child As Long = &H40000000
Global Const ws_visible As Long = &H10000000
Global Const WM_USER = 1024
Global Const wm_cap_driver_connect = WM_USER + 10
Global Const wm_cap_set_preview = WM_USER + 50
Global Const WM_CAP_SET_PREVIEWRATE = WM_USER + 52
Global Const WM_CAP_DRIVER_DISCONNECT As Long = WM_USER + 11
Global Const WM_CAP_DLG_VIDEOFORMAT As Long = WM_USER + 41
Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Declare Function capCreateCaptureWindow Lib "avicap32.dll" Alias "capCreateCaptureWindowA" (ByVal a As String, ByVal b As Long, ByVal c As Integer, ByVal d As Integer, ByVal e As Integer, ByVal f As Integer, ByVal g As Long, ByVal h As Integer) As Long


Nel form:

Private Sub Form_Load()

Dim hwdc As Long
Dim startcap As Boolean

Dim temp As Long
hwdc = capCreateCaptureWindow("visione", ws_child Or ws_visible, 0, 0, 320, 240, Picture1.hWnd, 0)
If (hwdc <> 0) Then
temp = SendMessage(hwdc, wm_cap_driver_connect, 0, 0)
temp = SendMessage(hwdc, wm_cap_set_preview, 1, 0)
temp = SendMessage(hwdc, WM_CAP_SET_PREVIEWRATE, 30, 100)
'temp = SendMessage(hwdc, WM_CAP_DLG_VIDEOFORMAT, 0&, 0&)
startcap = True
Else
MsgBox ("No Webcam found")
End If

End Sub

Ora vorrei salvare dei fotogrammi tramite un button, come potrei farlo?
Grazie..
Ultima modifica effettuata da ddemarch 26/08/09 11:42
aaa
26/08/09 12:49
GrG
Devi usare questo codice che metterai nel button

SendMessage hwdc, WM_CAP_EDIT_COPY, 0, 0
Picture1.Picture = Clipboard.GetData
SavePicture Picture1.Image, "percorso\immagine.bmp"
aaa
26/08/09 12:54
ddemarch
Grazie GrG, però c'è un problemino: l'immagine viene salvata ma vedo solo una bmp del colore dello sfondo della pictureBox..
Questa:
img41.imageshack.us/img41/8711/…
oppure senza il disegnetto in alto a sinistra.
Cosa potrebbe essere?
Ultima modifica effettuata da ddemarch 26/08/09 13:38
aaa
26/08/09 14:53
GrG
Mi ero dimenticato di dirti di aggiungere queste dichiarazioni

Global Const WM_CAP As Integer = &H400
Global Const WM_CAP_EDIT_COPY As Long = WM_CAP + 30

nel modulo, dovrebbe andare :)
Ultima modifica effettuata da GrG 26/08/09 14:54
aaa
26/08/09 14:59
ddemarch
Ho aggiunto ma nn funzia ancora..
L'immagine acquisita é sempre del colore dello sfondo..
:d
Ultima modifica effettuata da ddemarch 26/08/09 15:06
aaa
26/08/09 16:29
GrG
mm.. ok mi sono messo a provare, se vedi nella form load c'è questa stringa

temp = SendMessage(hwdc, WM_CAP_SET_PREVIEWRATE, 30, 100)

sostituisci l'ultimo valore (cioè 100) con 0

ossia

temp = SendMessage(hwdc, WM_CAP_SET_PREVIEWRATE, 30, 0)

vedrai che funziona ;)
aaa
27/08/09 6:13
ddemarch
Eh GrG mi dispiace ma nn mi funzia ancora.. :asd:
Ti posto tutto il codice che ho, magari provando ho modificato dei parametri che non dovevo..

Modulo:
Global Const ws_child As Long = &H40000000
Global Const ws_visible As Long = &H10000000
Global Const WM_USER = 1024
Global Const wm_cap_driver_connect = WM_USER + 10
Global Const wm_cap_set_preview = WM_USER + 50
Global Const WM_CAP_SET_PREVIEWRATE = WM_USER + 52
Global Const WM_CAP_DRIVER_DISCONNECT As Long = WM_USER + 11
Global Const WM_CAP_DLG_VIDEOFORMAT As Long = WM_USER + 41
Global Const WM_CAP As Integer = &H400
Global Const WM_CAP_EDIT_COPY As Long = WM_CAP + 30

Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Declare Function capCreateCaptureWindow Lib "avicap32.dll" Alias "capCreateCaptureWindowA" (ByVal a As String, ByVal b As Long, ByVal c As Integer, ByVal d As Integer, ByVal e As Integer, ByVal f As Integer, ByVal g As Long, ByVal h As Integer) As Long



Form:

Private Sub Form_Load()

Dim hwdc As Long
Dim startcap As Boolean

Dim temp As Long
hwdc = capCreateCaptureWindow("visione", ws_child Or ws_visible, 0, 0, 320, 240, Picture1.hWnd, 0)
If (hwdc <> 0) Then
temp = SendMessage(hwdc, wm_cap_driver_connect, 0, 0)
temp = SendMessage(hwdc, wm_cap_set_preview, 1, 0)
temp = SendMessage(hwdc, WM_CAP_SET_PREVIEWRATE, 30, 0)
'temp = SendMessage(hwdc, WM_CAP_DLG_VIDEOFORMAT, 0&, 0&)
startcap = True
Else
MsgBox ("No Webcam found")
End If

End Sub


Private Sub salva_Click()
SendMessage hwdc, WM_CAP_EDIT_COPY, 0, 0
Picture1.Picture = Clipboard.GetData
SavePicture Picture1.Image, "C:\Documents and Settings\...\immagine.bmp"
End Sub


L'immagine salvata ha sempre il colore dello sfondo, però vedo che viene sovrascritta cioe quando salvo crea una nuova foto e nn rimane sempre la stessa..

Grazie
Ultima modifica effettuata da ddemarch 27/08/09 6:37
aaa
27/08/09 8:33
GrG
devi spostare la dichiarazione della variabile hwdc fuori dalla sub form_load quindi metterla "in generale"
Ultima modifica effettuata da GrG 27/08/09 8:34
aaa