Capturar Cam de otra forma.

Iniciado por WarGhost, 20 Julio 2006, 22:56 PM

0 Miembros y 1 Visitante están viendo este tema.

WarGhost

Public Declare Function SendMessage Lib "USER32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Public 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

Public mCapHwnd As Long

Public Const CONNECT As Long = 1034
Public Const DISCONNECT As Long = 1035
Public Const GET_FRAME As Long = 1084
Public Const COPY As Long = 1054


Private Sub Form_Load()
On Error Resume Next
mCapHwnd = capCreateCaptureWindow("WebcamCapture", 0, 0, 0, 320, 240, Me.hwnd, 0)
DoEvents: SendMessage mCapHwnd, CONNECT, 0, 0

End Sub

Private Sub Form_Unload(Cancel As Integer)
On Error Resume Next
DoEvents: SendMessage mCapHwnd, DISCONNECT, 0, 0
End Sub

Private Sub Timer1_Timer()
On Error Resume Next
SendMessage mCapHwnd, GET_FRAME, 0, 0
SendMessage mCapHwnd, COPY, 0, 0
Picture1.Picture = Clipboard.GetData
End Sub


Este Codigo es el que tengo pero ami me gustaria saber si hay laguna otra forma de capturar la webCam pero esa no me gusta. hay alguna forma de por ejemplo solo capturar una imagen de la cam.

;D Salu2, WarGhost
¿Qué culpa tengo yo de tener la sangre roja y el corazón a la izquierda?

byebye

Citarhay alguna forma de por ejemplo solo capturar una imagen de la cam.

ese codigo es tuyo? pq se captura frame a frame.

WarGhost

no no ese código no es mio solo e modificado unas cosas ,pero quiero saber si hay alguna forma de simplemente capturar una imagen de la cam.
¿Qué culpa tengo yo de tener la sangre roja y el corazón a la izquierda?

Kizar

...

Private Sub Form_Load()
On Error Resume Next
mCapHwnd = capCreateCaptureWindow("WebcamCapture", 0, 0, 0, 320, 240, Me.hwnd, 0)
SendMessage mCapHwnd, CONNECT, 0, 0
SendMessage mCapHwnd, GET_FRAME, 0, 0
SendMessage mCapHwnd, COPY, 0, 0
Picture1.Picture = Clipboard.GetData
End Sub

Private Sub Form_Unload(Cancel As Integer)
On Error Resume Next
DoEvents: SendMessage mCapHwnd, DISCONNECT, 0, 0
End Sub

Robokop

Public Declare Function SendMessage Lib "USER32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Public 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

Public mCapHwnd As Long

Public Const CONNECT As Long = 1034
Public Const DISCONNECT As Long = 1035
Public Const GET_FRAME As Long = 1084
Public Const COPY As Long = 1054



Private Sub cmdStart_Click()
cmdStart.Enabled = False
cmdStop.Enabled = True
'Setup a capture window (You can replace "WebcamCapture" with watever you want)
mCapHwnd = capCreateCaptureWindow("WebcamCapture", 0, 0, 0, 320, 240, Me.hwnd, 0)

DoEvents: SendMessage mCapHwnd, CONNECT, 0, 0
tmrMain.Enabled = True
End Sub

Private Sub cmdStop_Click()
cmdStart.Enabled = True
cmdStop.Enabled = False
tmrMain.Enabled = False

DoEvents: SendMessage mCapHwnd, DISCONNECT, 0, 0
End Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
If cmdStop.Enabled = False Then
'Se asegura de la conexion
DoEvents: SendMessage mCapHwnd, DISCONNECT, 0, 0
End If
End Sub

Private Sub tmrMain_Timer()
On Error Resume Next
'Obtiene el frame actual
        SendMessage mCapHwnd, GET_FRAME, 0, 0
'Copia el Frame
        SendMessage mCapHwnd, COPY, 0, 0
'Pega los datos en el picture
        picOutput.Picture = Clipboard.GetData
'Limpia clipboard
        Clipboard.Clear
End Sub


timer:
name:tmrMAin
enabled=false
interval= 200


Este otro codigo a lo mejor te puede servir , este codigo no es mio lo obtuve de internet .

salu2

WarGhost

Muchas gracias ya tengo sulucionado el tema ;).

;D Salu2, WarGhost
¿Qué culpa tengo yo de tener la sangre roja y el corazón a la izquierda?

NYlOn

No hace falta cambiar el codigo, simplemente cambia el timer por algun otro evento, como por ejemplo un CommandButton. El codigo lo q hace es sacar frames cada determinado tiempo (el intervalo del Timer)... Y no entiendo qué es lo q no te gusta, es muy simple  :-\

WarGhost

Ya conseguí hacer lo que quería pero ahora no se como puedo hacer para saber si existe una cámara instalada y utilizable ¿?.


;) Gracias a todos.
¿Qué culpa tengo yo de tener la sangre roja y el corazón a la izquierda?

Kizar

Cuando vuelva te ayudo a listar los dispositivos de entrada de video y audio ;)

alfredogarc

Todo funciona perfectamente, pero como hago para grabar la imagen con una resolución específica, por ejemplo 200 x 240, tipo carnet? y no se puede grabar tipo jpg?