Autor
|
Tema: capture cam web (Leído 5,787 veces)
|
<[(x)]>
Desconectado
Mensajes: 215
|
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.
|
|
|
En línea
|
<[(x)]>
|
|
|
|
<[(x)]>
Desconectado
Mensajes: 215
|
busque un monton no puedo creer q me haya olvidado de esa pagina el primero esta incompleto y es como decia yo pero el segundo esta perfecto muchas gracias
|
|
|
En línea
|
<[(x)]>
|
|
|
<[(x)]>
Desconectado
Mensajes: 215
|
unm seba123neo problemaa cundo quiero: 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
|
|
« Última modificación: 21 Febrero 2010, 19:15 pm por <[(x)]> »
|
En línea
|
<[(x)]>
|
|
|
|
<[(x)]>
Desconectado
Mensajes: 215
|
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 como identificar formas... pero bue primero lo primero no? je poriams decirme como puedo hacer?
|
|
« Última modificación: 21 Febrero 2010, 19:42 pm por <[(x)]> »
|
En línea
|
<[(x)]>
|
|
|
seba123neo
|
proba algo asi: 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.
|
|
|
En línea
|
|
|
|
<[(x)]>
Desconectado
Mensajes: 215
|
jojo muy bueno ... 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 form1 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 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
|
|
|
En línea
|
<[(x)]>
|
|
|
el_c0c0
Desconectado
Mensajes: 307
|
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
|
|
|
En línea
|
'- coco "Te voy a romper el orto"- Las hemorroides
|
|
|
<[(x)]>
Desconectado
Mensajes: 215
|
jeje se coco eso es lo que quiero .. si alguien conoce un metodo q funcione y nouse el clipboard
|
|
|
En línea
|
<[(x)]>
|
|
|
|
|