Autor
|
Tema: Webcam (Leído 5,301 veces)
|
magarcan
Desconectado
Mensajes: 80
|
|
Webcam
« en: 10 Septiembre 2007, 00:14 am » |
|
He encontrado un código en internet que me permite capturar el contenido de una webcam. El caso es que el video lo muestra en un PictureBox. El problema es que si capturo el video a 320x240 independientemente del tamaño del PictureBox el video se muestra a ese tamaño. ¿Conocéis alguna manera de redimensionarlo (vamos, hacerle un zoom)? Gracias. PD: os dejo el código de la captura por si os es útil. 'Declaraciones: Const ws_visible = &H10000000 Const ws_child = &H40000000 Const WM_USER = 1024 Const WM_CAP_EDIT_COPY = WM_USER + 30 Const wm_cap_driver_connect = WM_USER + 10 Const wm_cap_set_preview = WM_USER + 50 Const wm_cap_set_overlay = WM_USER + 51 Const WM_CAP_SET_PREVIEWRATE = WM_USER + 52 Const WM_CAP_SEQUENCE = WM_USER + 62 Const WM_CAP_SINGLE_FRAME_OPEN = WM_USER + 70 Const WM_CAP_SINGLE_FRAME_CLOSE = WM_USER + 71 Const WM_CAP_SINGLE_FRAME = WM_USER + 72 Const DRV_USER = &H4000 Const DVM_DIALOG = DRV_USER + 100 Const PREVIEWRATE = 30
Private 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 Private 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
Dim hwndc As Long 'Declaro la función GetPixel Private Declare Function GetPixel Lib "gdi32" ( _ ByVal hdc As Long, _ ByVal X As Long, _ ByVal Y As Long) As Long
Private Sub Command1_Click() 'Código que realiza la captura de la imagen:
temp = SendMessage(hwndc, WM_CAP_EDIT_COPY, 1, 0) Set Picture1.Picture = Clipboard.GetData 'Guardo la imagen para ver las dimensiones SavePicture Picture1.Picture, "c:\imagen.jpg"
End Sub
Private Sub Form_Load() 'Código que activa la captura de imágenesse supone un formulario con 2 picture llamados "picture1" y "picture2")
hwndc = capCreateCaptureWindow("Ventana de Captura", ws_child Or ws_visible, 0, 0, Picture2.Width, Picture2.Height, Picture2.hwnd, 0) If (hwndc <> 0) Then temp = SendMessage(hwndc, wm_cap_driver_connect, 0, 0) temp = SendMessage(hwndc, wm_cap_set_preview, 1, 0) temp = SendMessage(hwndc, WM_CAP_SET_PREVIEWRATE, PREVIEWRATE, 0) End If
End Sub
|
|
|
En línea
|
|
|
|
ranslsad
Desconectado
Mensajes: 492
Dim Ranslsad as String * :P - Que Vicio!
|
|
Re: Webcam
« Respuesta #1 en: 10 Septiembre 2007, 00:46 am » |
|
Si lo que quieres es que se ponga el picturebox al mismo tamaño que la foto, nose.. por eso yo uso un "Image" es el otro apra poner fotos.. Espero que te haya servido la chapuzilla Salu2 Ranslsad
|
|
|
En línea
|
|
|
|
magarcan
Desconectado
Mensajes: 80
|
|
Re: Webcam
« Respuesta #2 en: 10 Septiembre 2007, 00:53 am » |
|
Ésto es una captura del programa. Lo que quiero hacer es que el video se me redimensione al tamaño del PictureBox
|
|
|
En línea
|
|
|
|
Arcangel
Desconectado
Mensajes: 492
Is About Power...
|
|
Re: Webcam
« Respuesta #3 en: 10 Septiembre 2007, 01:53 am » |
|
Cámbialo por un control image, con el picturebox no hay forma de hacerlo, lo que te tocaría seria diseñar alguna función que redimencione la imagen, lo que si puedes hacer es con la propiedad autosize hacer que el control se ponga del tamaño de la imagen pero no alrevez, ahora el control image tiene una opcion strech que sirve para hacer que imagenes mas grandes se pongan del tamaño del control, no tengo idea si sirve a la inversa xD capas si, sino como te dije, te tocaria hacer una funcion que se encargue de eso, muy posiblemente encuentres algún modulo por ahí que lo haga, busca en google.
Arcangel
|
|
|
En línea
|
|
|
|
LeandroA
|
|
Re: Webcam
« Respuesta #4 en: 10 Septiembre 2007, 02:04 am » |
|
hola como no se va a poder con el picture? mira solo tenes que pintarlo sobre el
Picture1.AutoRedraw = True Picture1.PaintPicture Clipboard.GetData, 0, 0, Picture1.ScaleWidth, Picture1.ScaleHeight Picture1.Refresh
Saludos
|
|
|
En línea
|
|
|
|
ranslsad
Desconectado
Mensajes: 492
Dim Ranslsad as String * :P - Que Vicio!
|
|
Re: Webcam
« Respuesta #5 en: 10 Septiembre 2007, 03:44 am » |
|
Arcangel
La primera vez que te veo en el foro de programacion vb Nose... as vuelto o algo o esque estas en otras secciones? PD: perdon que no tiene nada que veer con el thread pero me entro la curiosidad Salu2 Ranslsad
|
|
|
En línea
|
|
|
|
magarcan
Desconectado
Mensajes: 80
|
|
Re: Webcam
« Respuesta #6 en: 10 Septiembre 2007, 12:42 pm » |
|
He puesto ésto y no lo hace. Picture1.AutoRedraw = True Picture1.PaintPicture Clipboard.GetData, 0, 0, Picture1.ScaleWidth, Picture1.ScaleHeight Picture1.Refresh De hecho ahora tengo un problema mçás grave. Ayer estuve probando algunos códigos de funciones con webcam en vb. Y resulta que ahora, al visualizarse la imagen va despacio, como a 4 frames por segundo. Me imagino que alguno de éstos programas me hayan cambiado la configuración del "WDM Image capture". ¿Alguno sabéis como poner la configuración por defecto? EDITo: Ya he resuleto éste problema (el de los fps) el caso es que el programa que probé fijo los fps de captura a 8. Y el controlador de microsoft guarda la configuración, así que si no lo tocas te quedas con la última utilizada. Gracias
|
|
« Última modificación: 10 Septiembre 2007, 12:51 pm por magarcan »
|
En línea
|
|
|
|
ranslsad
Desconectado
Mensajes: 492
Dim Ranslsad as String * :P - Que Vicio!
|
|
Re: Webcam
« Respuesta #7 en: 10 Septiembre 2007, 15:17 pm » |
|
He puesto ésto y no lo hace. Picture1.AutoRedraw = True Picture1.PaintPicture Clipboard.GetData, 0, 0, Picture1.ScaleWidth, Picture1.ScaleHeight Picture1.Refresh Lo dicho hazlo con un Image... no con in PictureBox.. Se pone al tamaño de la imagen enseguida Salu2 Ranslsad
|
|
|
En línea
|
|
|
|
magarcan
Desconectado
Mensajes: 80
|
|
Re: Webcam
« Respuesta #8 en: 10 Septiembre 2007, 15:43 pm » |
|
Por lo visto el uso de ésta API en visual basic obliga a utilizar PIctureBox, ya que cambiándolos por ImageBox, dice que no reconoce nosequé.
Habrá que fastidiarse...Si alguien tiene alguna otra idea que lo diga. Gracias
|
|
|
En línea
|
|
|
|
TUNOVATO
Desconectado
Mensajes: 56
|
|
Re: Webcam
« Respuesta #9 en: 11 Septiembre 2007, 18:00 pm » |
|
'Obtiene frames , copia y adapta la escala a la ventana del picture1 SendMessage hWndCap, GET_FRAME, 0, 0 SendMessage hWndCap, COPY, 0, 0 SendMessage hWndCap, SET_SCALE, True, 0 'esto es lo que necesitas pero busca la api conrrespondiente o equivalente
|
|
« Última modificación: 11 Septiembre 2007, 18:03 pm por TUNOVATO »
|
En línea
|
|
|
|
|
|