![]() |
Capturar Imagen WebCam Avanzado
Capturar Imagen WebCam Avanzado - Direct X
Hace un tiempo publique un truco basado en una función de la API de Windows capCreateCaptureWindow para hacer capturas de imágenes de la WebCam. Para ver esta publicación pueden remitirse a este link http://www.clubdelphi.com/foros/show...756#post361756 . Si bien funciona sin problemas para la mayorías de las cámaras, con algunas no lo hace. Compartir como lo resolví es el motivo principal para realizar esta publicación. Sin mas dilaciones los invito a seguir los pasos que aquí presento. Esta basado en la implementacion de DirectX 9.0, de forma sencilla y practica. PASO 1 Descargar este archivo: Esta ubicado en http://terawiki.clubdelphi.com/Imagenes/ y se llama WebCamDirectX.zip. PASO 2 Crear una carpeta WebCamPic para guardar nuestro proyecto PASO 3 Los archivos contenidos en WebCamDirectX.zip extraerlos en WebCamPic, la carpeta DirectX se creara automáticamente . Link de descarga http://terawiki.clubdelphi.com/Image...CamDirectX.zip PASO 4 Crear en Delphi un nuevo proyecto FILE -> New -> VCL Forms Application - Delphi Guardar como Unit1 y darle el nombre al proyecto (.DPR) que sea de su agrado. Yo lo llame WebCamPicII.DPR PASO 5 - Colocando componentes en el Form1 En el Form1 colocaremos dos componentes TImage uno a la derecha y otro a la izquierda, siendo las medidas recomendables para ambos iguales: with:=260 - height:=300. Al de la izquierda llamaremos ImageCamera y al de la derecha ImagePhoto. El TImage ImageCamera se utiliza para proyectar el vídeo y ImagePhoto para hacer una captura (tomar una foto) de lo que ve la cámara. Agregar los siguientes componentes en el Form1 y los nombraremos como aquí sugiero, sin ser esto obligatorio Un TComboBox llamado CB_ListaCamaras, se utiliza para listar el nombre de todas la cámaras conectadas a nuestra pc, en caso de ser una contendrá un único items con su nombre. Colocar 4 TButton, llamarlos de la siguiente manera: EncenderCamara, DetenerCamara, Configure y TomarFoto PASO 6 - Incorporando units Incorporar todas las units que descargamos a nuestro proyecto: Project -> Add to Project... Shift+F11. Ellas son: Carpeta WebCamPic VFrames.pas - VSample.pas Carpeta WebCamPic\DirectX DXTypes.pas - DirectSound.pas - DirectShow9.pas - DirectDraw.pas - Direct3D9.pas PASO 7 - Escribiendo el codigo Agregar en el uses de nuestra Form1 VFrames y Vcl.Imaging.jpeg
Declarar la siguiente variable fVideoImage
En el evento OnCreate colocar el siguiente código
Codificando el OnClick para el boton EncenderCamara
Codificando el OnClick para el boton Configure
Codificando el OnClick para el boton DetenerCamara
Codificando el OnClick para el boton TomarFoto
Consideraciones finales Una vez que logramos capturar una instantánea del vídeo que corre como streaming en el TImage ImageCamera en el TImage ImagePhoto, podemos dar rienda suelta a nuestra creatividad para hacer uso de esa imagen adquirida. La misma puede ser almacenada en un campo Blob de una base de datos, o bien podemos guardarla como un archivo. Las posibilidades a partir de este punto ya no tienen limite mas que la propia imaginación de que uso se le quiere dar a este truco. Expreso mis deseo que les sea de utilidad a todos los interesados y sus comentarios serán bienvenidos para mejorar este humilde aporte. |
Archivo de la carpeta WebCamPic\DirectX
No es necesario tener instalados componentes JEDI
|
Los archivos están en la terawiki, tuve que subirlos allí para poder compartirlos
|
Gracias por compartir
Un saludo |
Cita:
|
Cita:
^\||/^\||/^\||/ |
Se que tiene unos años el post. Pero me he puesto a usar la webcam con DirectX después de tener una app hecha de hace años con avicap32 y no funcionar en todas las cámaras.
He implementado lo que comentáis arriba, creo que falta un Tpanel en el código y me funciona para todas las cámaras, pero he observado un problema. He hecho un programa que pide tener un texto con el nombre de la foto en un edit. Si no hay nombre muestra un MessageBox. Al mostrar dicho mensaje la webcam congela la imagen y hasta que no pulse Aceptar se descongela. Me ocurre con cualquier mensaje incluso con MessageDlg, etc. He probado otro ejemplo por la web y ocurre igual. En avicap32 no me pasa. He probado a poner Application.ProcessMessages; pero no funciona. ¿Me podéis sugerir algo? |
Crea un hilo con tu pregunta en el foro adecuado, este es el de trucos.
|
gracias por avisar
|
La franja horaria es GMT +2. Ahora son las 17:52:36. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi