Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros temas > Trucos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Los mejores trucos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-04-2019
Avatar de casacham
casacham casacham is offline
Miembro
 
Registrado: abr 2006
Ubicación: Cordoba->Argentina. Arboleas->Almeria->España
Posts: 184
Poder: 19
casacham Va por buen camino
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
Código Delphi [-]
interface

uses
  Winapi.Windows,.........,
  VFrames,           // Unidad especial que utiliza DIRECT X
  Vcl.Imaging.jpeg;

Declarar la siguiente variable fVideoImage
Código Delphi [-]
  private
    { Private declarations }
    fVideoImage : TVideoImage;

En el evento OnCreate colocar el siguiente código
Código Delphi [-]
procedure FormCreate(Sender: TObject);
var
  DeviceList : TStringList;
begin
  fVideoImage:=TVideoImage.Create;

   // Buscando camaras conectadas
  DeviceList := TStringList.Create;
  fVideoImage.GetListOfDevices(DeviceList);

  IF DeviceList.Count < 1 then begin
      ShowMessage('NO HAY CÁMARAS CONECTADAS - NO SE PUEDE TOMAR UNA FOTO');
      DeviceList.DisposeOf;
      exit;
  end else begin
      // If at least one camera has been found.
      with CB_ListaCamaras do begin
           Items.Clear;
           Items.Assign(DeviceList);
           ItemIndex := 0;
           DeviceList.DisposeOf;
      end;
  end;
end;

Codificando el OnClick para el boton EncenderCamara
Código Delphi [-]
procedure EncenderCamaraClick(Sender: TObject);
begin
  fVideoImage.SetDisplayCanvas(ImageCamera.Canvas);
  Screen.Cursor := crHourGlass;
  Application.ProcessMessages;

  fVideoImage.VideoStart(CB_ListaCamaras.Items[CB_ListaCamaras.itemindex]);

  CB_ListaCamaras.Enabled:=False;
  Screen.Cursor := crDefault;
end;

Codificando el OnClick para el boton Configure
Código Delphi [-]
procedure ConfigureClick(Sender: TObject);
begin
  FVideoImage.ShowProperty_Stream;
end;

Codificando el OnClick para el boton DetenerCamara
Código Delphi [-]
procedure DetenerCamaraClick(Sender: TObject);
begin
  FVideoImage.VideoStop;
  CB_ListaCamaras.Enabled:=True;
end;

Codificando el OnClick para el boton TomarFoto
Código Delphi [-]
procedure TomarFotoClick(Sender: TObject);
var
  PanelDC: HDC;
  Xwidth,Yheight: Integer;
begin
  Xwidth :=ImageCamera.Width;
  Yheight:=ImageCamera.Height;

  if not Assigned(ImagePhoto.Picture.Bitmap) then
    ImagePhoto.Picture.Bitmap := TBitmap.Create
  else
  begin
    ImagePhoto.Picture.Bitmap.DisposeOf;
    ImagePhoto.picture.Bitmap := TBitmap.Create;
  end;
  ImagePhoto.Picture.Bitmap.Height := Yheight;
  ImagePhoto.Picture.Bitmap.Width  := Xwidth;;

  PanelDC := GetDC(PanelCamara.Handle);
  try
    BitBlt(ImagePhoto.Picture.Bitmap.Canvas.Handle,
           0,0,Xwidth, Yheight, PanelDC, 0,0, SRCCOPY);
  finally
    ReleaseDC(Handle, PanelDC);
  end;

  ImagePhoto.Stretch := True;
  ImagePhoto.Proportional:=True;
end;

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.
__________________
La vida no trata de encontrarse a uno mismo, sino de crearse a uno mismo.
Tanto si piensas que puedes como si no, estarás en lo cierto

Última edición por casacham fecha: 28-04-2019 a las 20:06:26.
Responder Con Cita
  #2  
Antiguo 28-04-2019
Avatar de casacham
casacham casacham is offline
Miembro
 
Registrado: abr 2006
Ubicación: Cordoba->Argentina. Arboleas->Almeria->España
Posts: 184
Poder: 19
casacham Va por buen camino
Archivo de la carpeta WebCamPic\DirectX

No es necesario tener instalados componentes JEDI
__________________
La vida no trata de encontrarse a uno mismo, sino de crearse a uno mismo.
Tanto si piensas que puedes como si no, estarás en lo cierto

Última edición por casacham fecha: 28-04-2019 a las 20:07:46.
Responder Con Cita
  #3  
Antiguo 28-04-2019
Avatar de casacham
casacham casacham is offline
Miembro
 
Registrado: abr 2006
Ubicación: Cordoba->Argentina. Arboleas->Almeria->España
Posts: 184
Poder: 19
casacham Va por buen camino
Los archivos están en la terawiki, tuve que subirlos allí para poder compartirlos

Última edición por casacham fecha: 28-04-2019 a las 20:11:33.
Responder Con Cita
  #4  
Antiguo 30-04-2019
Avatar de ElKurgan
[ElKurgan] ElKurgan is offline
Miembro Premium
 
Registrado: nov 2005
Posts: 1.237
Poder: 20
ElKurgan Va camino a la fama
Thumbs up

Gracias por compartir

Un saludo
Responder Con Cita
  #5  
Antiguo 30-04-2019
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.257
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por casacham Ver Mensaje
Los archivos están en la terawiki, tuve que subirlos allí para poder compartirlos
¿Dónde están y con qué nombre?
Responder Con Cita
  #6  
Antiguo 30-04-2019
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.257
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por Casimiro Notevi Ver Mensaje
¿Dónde están y con qué nombre?
Ya lo he visto
Responder Con Cita
  #7  
Antiguo 27-06-2022
alquimista alquimista is offline
Miembro
 
Registrado: ene 2008
Posts: 209
Poder: 17
alquimista Va por buen camino
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?
Responder Con Cita
  #8  
Antiguo 28-06-2022
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.257
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Crea un hilo con tu pregunta en el foro adecuado, este es el de trucos.
Responder Con Cita
  #9  
Antiguo 28-06-2022
alquimista alquimista is offline
Miembro
 
Registrado: ene 2008
Posts: 209
Poder: 17
alquimista Va por buen camino
gracias por avisar
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Capturar Imagen Con WebCam casacham Gráficos 46 17-12-2017 00:05:37
Webcam capturar imagen y adaptada ronald_tro Gráficos 18 14-12-2017 20:48:42
Capturar imagen webcam fmtidona Gráficos 4 25-11-2005 19:04:31
Capturar imagen de webcam en Monocromo fmtidona Gráficos 1 15-09-2005 23:18:49
Capturar imagen desde webcam wogshit Gráficos 1 03-06-2004 11:14:50


La franja horaria es GMT +2. Ahora son las 00:59:07.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi