capture cam web

Iniciado por <[(x)]>, 20 Febrero 2010, 06:07 AM

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

<[(x)]>




hola quiero capturar imagenes de la camara web de mi notebook...

ya tengo un codigo pero usa la funcion sendmessage y hace pasar la imagenes capturadas por el clipboard.  :-\

les agradeceria mucho si me alcanzasen un codigo q no use este mismo metodo.
<[(x)]>

seba123neo

La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

<[(x)]>

 :o

busque un monton no puedo creer q me haya olvidado de esa pagina  :P


el primero esta incompleto y es como decia yo pero el segundo esta perfecto muchas gracias ;-)
<[(x)]>

<[(x)]>

#3
unm seba123neo problemaa :P


cundo quiero:
Código (vb) [Seleccionar]
Private Sub Timer1_Timer()
Dim x As Integer
Dim y As Integer
For x = 0 To 480 / 10
For y = 0 To 640 / 10
 Me.BackColor = GetPixel(Picture1.hdc, x, y)
Next
Next
End Sub


el color que saca getpixel es siempre el background del dc delpicture
<[(x)]>

seba123neo

La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

<[(x)]>

#5
 mmm es complejo ya se como lo voi a hacer nose si se tildara mucho desp lo paso a c++...

en fin lo que quiero es poder por ejemplo encontrar un punto de tal color en la imagen y ver donde esta (x,y) y con eso pordria hacer muchas cositas  :P como identificar formas...
pero bue
primero lo primero no? je


poriams decirme como puedo hacer?
<[(x)]>

seba123neo

proba algo asi:

Código (vb) [Seleccionar]
Option Explicit

Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long) As Long
Private Declare Function SetPixelV Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long, ByVal crColor As Long) As Long

Private Sub Command1_Click()

    Dim vEscalaForm As Integer, vPicEscala As Integer
    Dim X As Long, Y As Long, vAlto As Long, vAncho As Long
   
    vEscalaForm = Me.ScaleMode
    vPicEscala = Picture1.ScaleMode
   
    Me.ScaleMode = 3
    Picture1.ScaleMode = 3
   
    vAncho = Picture1.width
    vAlto = Picture1.height
   
    Me.Cls
   
    For X = 0 To vAncho
        For Y = 0 To vAlto
            If Picture1.Point(X, Y) = 6522062 Then
                SetPixelV Me.hdc, X, Y, GetPixel(Picture1.hdc, X, Y)
            End If
            DoEvents
        Next
        DoEvents
    Next
   
    Me.ScaleMode = vEscalaForm
    Picture1.ScaleMode = vPicEscala
End Sub

Private Sub Form_Load()
    With Picture1
        .AutoSize = True
        .Picture = LoadPicture(Environ("windir") & "\Santa Fe.bmp")
    End With
End Sub


esto hace como un escaneo de los pixeles de la imagen y va sacando el color de ese pixel escaneado, con un simple if podes sacar los colores que te interesen y volcarlos en otro lado, por ejemplo aca se saca un determinado color y vuelca "solo ese color" en el formulario...

saludos. 
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

<[(x)]>



jojo muy bueno  :P... solo q ese codigo es el q estoy probando y no me saca el color del pixel..

probe con picture.point(x,y), getpixel recorriendo la imagen con el for anidado y no hace mas q darme en todos los pixeles un mismo color el de  backgound  :-\.


te dejo lo que copypaste hasta ahora   :silbar:
form1
Código (vb) [Seleccionar]
Option Explicit
Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
Dim temp As Long

' botón que inicia la captura
'''''''''''''''''''''''''''''''''''''''
Private Sub Command1_Click()
Dim temp As Long

  hwdc = capCreateCaptureWindow("CapWindow", 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_SET_SCALE, True, 0)
    'esto hace que la imagen recibida por el dispositivo se ajuste
    'al tamaño de la ventana de captura (justo lo que yo buscaba)
    DoEvents
    startcap = True
    Else
    MsgBox "No hay Camara Web", 48, "Error"
  End If

End Sub

' botón para detener la captura
'''''''''''''''''''''''''''''''''''''''
Private Sub Command2_Click()
   
    temp = DestroyWindow(hwdc)
    If startcap = True Then
        temp = SendMessage(hwdc, WM_CAP_DRIVER_DISCONNECT, 0&, 0&)
        DoEvents
        startcap = False
    End If

End Sub

' Botón que abre el dialogo de formato
''''''''''''''''''''''''''''''''''''''''''''
Private Sub Command3_Click()
        If startcap = True Then
           
            temp = SendMessage(hwdc, WM_CAP_DLG_VIDEOFORMAT, 0&, 0&)
            DoEvents
        End If
End Sub
' Mostrar dialogo de Configuracion de la WebCam
''''''''''''''''''''''''''''''''''''''''''''''''''''
Private Sub Command4_Click()
Dim temp As Long
    If startcap = True Then
        temp = SendMessage(hwdc, WM_CAP_DLG_VIDEOCONFIG, 0&, 0&)
        DoEvents
    End If
End Sub

Private Sub Form_Load()
    Command1.Caption = "Iniciar"
    Command2.Caption = "Detener"
    Command3.Caption = "Formato"
    Command4.Caption = "Configurar"
    Me.Caption = "Capturador de Web Cam"
End Sub

Private Sub Form_Resize()
    On Error Resume Next
    Move (Screen.Width - Width) \ 29, (Screen.Height - Height) \ 29
End Sub

Private Sub Form_Unload(Cancel As Integer)

    temp = DestroyWindow(hwdc)
    If startcap = True Then
        temp = SendMessage(hwdc, WM_CAP_DRIVER_DISCONNECT, 0&, 0&)
        DoEvents
        startcap = False
    End If
End Sub



Private Sub Timer1_Timer()
Dim x As Integer
Dim y As Integer
For x = 0 To 480 / 10
For y = 0 To 640 / 10
  Me.BackColor = Picture1.Point(x, y)
Next
Next
End Sub


modulo
Código (vb) [Seleccionar]
Option Explicit
' declaraciones Api, constantes, variables
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Public Const ws_child = &H40000000
Public Const ws_visible = &H10000000
Public Const WM_USER = 1024
Public Const wm_cap_driver_connect = WM_USER + 10
Public Const wm_cap_set_preview = WM_USER + 50
Public Const WM_CAP_SET_PREVIEWRATE = WM_USER + 52
Public Const WM_CAP_DRIVER_DISCONNECT = WM_USER + 11
Public Const WM_CAP_DLG_VIDEOFORMAT = WM_USER + 41
Public Const WM_CAP_DLG_VIDEOCONFIG = WM_USER + 42
Public Const WM_CAP_SET_SCALE = WM_USER + 53

'Api para crear la ventana de captura
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 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 DestroyWindow Lib "user32" (ByVal hndw As Long) As Boolean
'Solo 16 Bits (vb2, vb3 y vb4  de 16)
'Declare Function SendMessage Lib "User" ( _
    ByVal hWnd As Integer, _
    ByVal wMsg As Integer, _
    ByVal wParam As Integer, _
    lParam As Any) As Long
'Api para crear la ventana de captura
'Declare Function capCreateCaptureWindow Lib "avicap.dll" ( _
    ByVal lpszWindowName As String, _
    ByVal dwStyle As Long, _
    ByVal x As Integer, _
    ByVal y As Integer, _
    ByVal nWidth As Integer, _
    ByVal nHeight As Integer, _
    ByVal hwndParent As Integer, _
    ByVal nID As Integer) As Long
'Declare Function DestroyWindow Lib "User" (ByVal hndw As Integer) As Integer
Public hwdc As Long
Public startcap As Integer





<[(x)]>

el_c0c0

sabes lo que pasa, intenta hacer bitblt al picture donde tenes la captura y pintarlo en otro picture, fijate que te va a quedar negro o del color de fondo del picture de la captura. tenes que usar otro metodo, donde puedas obtener la imagen.

nose si me entendiste, pero con eso, por lo menos yo, no podia obtener la foto de la webcam, era imposible. habia que buscar otro metodo como el del clipobard o otro que habia hecho cobein (que no recuerdo si usaba el clipboard)

saludos
'-     coco
"Te voy a romper el orto"- Las hemorroides

<[(x)]>




jeje se coco eso es lo que quiero .. si alguien conoce un metodo q funcione y nouse el clipboard ;-)
<[(x)]>