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

 
 
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 19:06:26.
Responder Con Cita
 



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 16-12-2017 23:05:37
Webcam capturar imagen y adaptada ronald_tro Gráficos 18 14-12-2017 19:48:42
Capturar imagen webcam fmtidona Gráficos 4 25-11-2005 18:04:31
Capturar imagen de webcam en Monocromo fmtidona Gráficos 1 15-09-2005 22:18:49
Capturar imagen desde webcam wogshit Gráficos 1 03-06-2004 10:14:50


La franja horaria es GMT +2. Ahora son las 21:42:45.


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