A continuación os presento el software que os permitirá manejar vuestra Webcam con Delphi.
Primeramente tenéis que instalar en vuestro sistema el software "Microsoft Video for Windows SDK " que contiene la librería Avicap32.dll.
Dentro de las funciones que contiene utilizaremos "capCreateCaptureWindowA" para inicializar el driver y capturar la imagen.
Después para manejar la ventana de captura tendremos que usar la función "SendMessage" lo que facilita y simplifica muchísimo el trabajo a los programadores.
Ahora vamos con el programa:
Como variables globales añadimos:
Ventana: hwnd; //Handle de la ventana de captura
En la sección "const" escribimos:
WM_CAP_START = WM_USER;
WM_CAP_STOP = WM_CAP_START + 68;
WM_CAP_DRIVER_CONNECT = WM_CAP_START + 10;
WM_CAP_DRIVER_DISCONNECT = WM_CAP_START + 11;
WM_CAP_SAVEDIB = WM_CAP_START + 25;
WM_CAP_GRAB_FRAME = WM_CAP_START + 60;
WM_CAP_SEQUENCE = WM_CAP_START + 62;
WM_CAP_FILE_SET_CAPTURE_FILEA = WM_CAP_START + 20;
WM_CAP_EDIT_COPY = WM_CAP_START + 30;
WM_CAP_SET_PREVIEW = WM_CAP_START + 50;
WM_CAP_SET_PREVIEWRATE = WM_CAP_START + 52;
En la sección "implementation":
FUNCTION capCreateCaptureWindowA(lpszWindowName: PCHAR; dwStyle: longint; x: integer; y: integer; nWidth: integer; nHeight: integer; ParentWin: HWND; nId: integer): HWND; STDCALL EXTERNAL 'AVICAP32.DLL';
Es la llamada a la librería externa Avicap32.dll
Elementos de la interface:
-Botón "iniciar" (Al pulsarlo empezará la captura de la imagen procedente de la Webcam)
-Botón "detener" (Para parar la captura de la imagen)
-Control de Imagen "tImage" (lo llamaremos "Image1")
El código que se incluirá dentro de los botones es el siguiente:
Botón "Iniciar"
PROCEDURE TForm1.Button1Click(Sender: TObject);
BEGIN
Ventana := capCreateCaptureWindowA('Ventana de captura',
WS_CHILD OR WS_VISIBLE, image1.Left, image1.Top, image1.Width,
image1.Height, form1.Handle, 0);
IF Ventana <> 0 THEN
BEGIN
TRY
SendMessage(Ventana, WM_CAP_DRIVER_CONNECT, 0, 0);
SendMessage(Ventana, WM_CAP_SET_PREVIEWRATE, 40, 0);
SendMessage(Ventana, WM_CAP_SET_PREVIEW, 1, 0);
EXCEPT
RAISE;
END;
END
ELSE
BEGIN
MessageDlg('Error al conectar Webcam', mtError, [mbok], 0);
END;
END;
Botón "Detener"
PROCEDURE TForm1.Button2Click(Sender: TObject);
BEGIN
IF Ventana <> 0 THEN
BEGIN
SendMessage(Ventana, WM_CAP_DRIVER_DISCONNECT, 0, 0);
Ventana := 0;
END;
END;
En el evento Onclose deberemos hacer una llamada al procedimiento incluido en el botón "Detener".
Y eso es todo por ahora, en posteriores artículos iremos añadiendo más utilidades.
Hola,
ResponderEliminarhe probado este código, pero la imagen siempre se ve negra. No se muestra el movimiento en la misma.
Ni siquiera cuando se detiene la "captura".
Alguna idea de qué podría ser ? Estoy con Delphi 2010.
Gracias.
Hola estoy probando y me pasa lo mismo, uso delphi 7 y tengo windows 7
EliminarHola.. Yo uso delphi 2010 en un Windows 7 y funciona sin problemas
ResponderEliminar, pero no es asi cuando intento pasar el ejecutable generado a un windows xp.Me dice que tengo problemas con la dll "msvcrt"
y si, si tengo esa dll
Ojala puedan ayudarme :)
Intenta activar la opción del compilador "Build with runtime packages" en Project->Options->Packages
ResponderEliminarHola no se que he hecho pero al fin a funcionado xD
ResponderEliminarEn estos momentos se me presenta otro problema cuando deseo capturar la imagen que se muestra en pantalla:
la sentencia Image1.Savetofile(C:\...\foto.jpg) no funciona :S
Espero que puedan ayudarme
Supongo que hay de utilizar una de las sentencias creadas mas arriba ¿no?
Para guardar una imagen tienes que hacer:
ResponderEliminarimage1.picture.savetofile ('c:\fichero.jpg')
Si esa es la funcion que estoy usando
ResponderEliminar,solo la tipee mal arriba por le apuro xP
El error que da no parece ser un error de codigo, es decir compila sin problemas, solo que cuando programas el boton "guardar" con la sentencia Savetofile simplemente no pasa nada.No genera el archivo en la ruta especificada (c:\foto.bmp)
Es algo frustrante :S
Ojala puedan tirarmen una sugerencia de como hacerlo
todo sale negro en caso de solucion maruonofre@gmail.com
ResponderEliminarHola me marca error,el error es :external excepcion C0000008, Y me manda a esta linea "SendMessage(Ventana, WM_CAP_SET_PREVIEWRATE, 40, 0);" utilizo delphi 7 en windows 7 y una cámara de usb. les agradecería que me pudieran ayudar y mandar un correo a dekor_ar@hotmail.com.
ResponderEliminarSaludos.
con Delphi 7 y WindowsXP funciona perfecto.
ResponderEliminarQuizás podrías utilizar una versión superior de Delphi con Windows 7, para ver si el problema viene de ahí.
Buenas tardes, a mi no me manda ningun mensaje de error pero no veo la imagen de la camara todo es negro, alguien sabe como resolverlo???
ResponderEliminarGracias por la ayuda
el tamaño del video esta saliendo demasiado grande un video de 7 minuto sale con tamaño de 46,4 mb es demasiado grande es possible disminuirlo por que ademas no eres muy buena la calidad
ResponderEliminary si yo convierto el hacia avi mismo sendo lo mismo formato de el el damaño baja para unos 1,06 mb eres possible mejorar esto o cambiar el formato del video ???
mi email eres isaacwith@outlook.com
puedes ayudarme con esto???
Alguien me puede ayudar, uso delphi 7 y windows 7, el problema que tengo es que no se activa la camara solo muesta la imagen en negro.
ResponderEliminarLo mismo me pasa y no quiere mostrar alguien lo ah resuelto...
EliminarTambien me sale solo en negro, lo hice con una camara HD y me sale en negro, puse una webcam sencilla y si me da la imagen, pero necesito usar la webcam HD, alguien sabe como le puedo hacer?
EliminarLo hice con delphi 2010 y win10
EliminarLo usé con Delphi 7 Windows 7 en una Dell vostro 3560 y funcionó perfectamente
ResponderEliminarperfeito
ResponderEliminarbuenos dias , me da un error en la variable "ventana " al parecer no esta declarada
ResponderEliminar