Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-11-2022
elcigarra elcigarra is offline
Miembro
 
Registrado: may 2005
Posts: 269
Poder: 20
elcigarra Va por buen camino
Dos cámaras en paralelo

Estimados, estoy intentando hacer una aplicación en DXE3, que necesita capturar video, en principio de 2 cámaras (que pueden ser la misma mostrada dos veces). Como no sé nada del tema de video, encontré en internet un código bastante simple con el que se podía capturar una cámara que funciona bien (en realidad más que capturar la cámara toma fotogramas con un timer y los muestra en un TPanel.

Para el objetivo de las dos cámaras, lo que hice fue duplicar las partes relevantes y el timer para mostrar las dos capturas, pero lo que me pasa es que solo se ve una y la otra se muestra un plano verde. Les pongo el código a ver qué opinan.

Código:
unit TwoCamsMain;
interface
uses
   Windows,Messages,SysUtils,Classes,Graphics,Controls,Forms,Dialogs,ExtCtrls,
   StdCtrls,Menus, Buttons;
const
   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;
type
  TForm1 = class(TForm)
    Timer1: TTimer;
    Panel1: TPanel;
    Panel2: TPanel;
    Timer2: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Timer1Timer(Sender: TObject);
    procedure Timer2Timer(Sender: TObject);
  private
    hWndC:THandle;
    hWndC_B:THandle;
    FPS:integer;
    procedure ConectarDrive;
    procedure CreaHandle;
    procedure DesconectarDrive;
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;


  function capCreateCaptureWindowA(lpszWindowName : PCHAR;
                                 dwStyle : longint;
                                 x : integer;
                                 y : integer;
                                 nWidth : integer;
                                 nHeight : integer;
                                 ParentWin  : HWND;
                                 nId : integer): HWND;
                                 STDCALL EXTERNAL 'AVICAP32.DLL';

implementation
{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
   FPS:=24;
   Timer1.Interval:=1000 div FPS;
   Timer2.Interval:=1000 div FPS;
   hWndC:=0;
   hWndC_B:=0;
   CreaHandle;
   ConectarDrive;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
   Application.ProcessMessages;
   if hWndC<>0 then begin
      SendMessage(hWndC, WM_CAP_GRAB_FRAME, 0, 0);
      Timer1.Enabled:=True;
   end;
end;

procedure TForm1.Timer2Timer(Sender: TObject);
begin
//   Application.ProcessMessages;
   if hWndC_B<>0 then begin
      SendMessage(hWndC_B, WM_CAP_GRAB_FRAME, 0, 0);
      Timer2.Enabled:=True;
   end;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
   DesconectarDrive;
end;

procedure TForm1.CreaHandle;
begin
     try
        hWndC:=capCreateCaptureWindowA(' Video',
                                       WS_CHILD or WS_VISIBLE,
                                       0,
                                       0,
                                       Width,
                                       Height,
                                       Panel1.Handle,
                                       0);
        hWndC_B:=capCreateCaptureWindowA(' Video',
                                       WS_CHILD or WS_VISIBLE,
                                       0,
                                       0,
                                       Width,
                                       Height,
                                       Panel2.Handle,
                                       0);
     except
           ShowMessage('error en handle');
     end;
end;
procedure TForm1.ConectarDrive;
begin
     try
        if hWndC<>0 then begin
           SendMessage(hWndC, WM_CAP_DRIVER_CONNECT, 0, 0);
        end;
        if hWndC_B<>0 then begin
           SendMessage(hWndC_B, WM_CAP_DRIVER_CONNECT, 0, 0);
        end;
        Timer1.Enabled:=True;
        Timer2.Enabled:=True;
     except
           ShowMessage('error al desconectar'); // error mesg
     end;
end;
procedure TForm1.DesconectarDrive; // Disconnect
begin
   try
      if hWndC<>0 then begin
         SendMessage(hWndC, WM_CAP_DRIVER_DISCONNECT, 0, 0);
         hWndC:=0;
         SendMessage(hWndC_B, WM_CAP_DRIVER_DISCONNECT, 0, 0);
         hWndC_B:=0;
      end;
   except
      ShowMessage('error al desconectar'); // error message
   end;
end;
end.
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
multiples camaras web JULIPO FireMonkey 0 09-05-2014 20:34:43
Camaras Ip raul.rojas Internet 5 25-01-2012 18:22:05
Cámaras WIA monina2112 Gráficos 5 02-06-2011 17:39:22
camaras ip martinchooozzz Varios 0 08-04-2009 00:17:03
Sistema con Camaras Ip Rabata Varios 1 07-09-2006 09:22:07


La franja horaria es GMT +2. Ahora son las 23:24:13.


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