Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Gráficos (https://www.clubdelphi.com/foros/forumdisplay.php?f=8)
-   -   No activa la webcam (https://www.clubdelphi.com/foros/showthread.php?t=96716)

trex2000 29-05-2024 07:19:59

No activa la webcam
 
Saludos a todos.

Tengo la duda de que en la aplicación que estoy realizando al mandar encender la webcam marca error de Access Violation, el detalle es que en un stringlist si me la detecta.

He realizado algunos ejemplos que hay en este Club y funcionan pero al copiar el código a las unidades que necesito de mi aplicación manda el error que les he comentado.

Alguien me podría decir como corregir esta situación?

De antemano muchas gracias.

Neftali [Germán.Estévez] 29-05-2024 08:30:44

sin ver nada de código es difícil saber qué está pasando.
"Access Violation" habitualmente es un acceso a memoria no inicializada, un objeto que no se ha creado,...

Ejecuta paso a paso, para saber exactamente qué línea te está provocando ese error.
A partir de ahí, se puede pensar en una solución.

trex2000 29-05-2024 20:55:05

Buenas tardes.

Tengo un menú principal y de ahí mando llamar un catalogo de clientes de la siguiente manera:

Código Delphi [-]
  frmCatClientes := TfrmCatClientes.Create(nil);
  frmCatClientes.ShowModal;
  frmCatClientes.Free;

En el catalogo tengo un boton que manda llamar el form de la camara de la siguiente manera:
Código Delphi [-]
  frmCamara := TfrmCamara.Create(nil);
  frmCamara.ShowModal;
  frmCamara.Free;

En el form de la camara en la clausula USES pongo VFrames y System.IOUtils

En el private pongo las siguientes variables:
Código Delphi [-]
    imgFileName:String;
    cam:TVideoImage;

Y utilizo el siguiente codigo:
Código Delphi [-]
procedure TfrmCamara.btnGrabarFrameClick(Sender: TObject);
begin
  Randomize;
  // Tomar un snapShot
  var Bmp := TBitmap.Create;
  try
    cam.GetBitmap(bmp);
    imgFileName := TPath.GetTempPath + Random(9999).ToString + '_imagen.bmp';
    bmp.SaveToFile(imgFileName);
  finally
    bmp.Free;
  end;
  // Cargarlo de disco
  imgFrame.Picture.LoadFromFile(imgFileName);
  //
  Caption := imgFileName;

end;

procedure TfrmCamara.btnInicializarClick(Sender: TObject);
begin
  // inicializar
  cam := TVideoImage.Create;
  cam.GetListOfDevices(TStringList(lbCamList.Items));

  // Activar controles
  lbCamList.Enabled := (lbCamList.Count > 0);

end;

procedure TfrmCamara.btnSalirClick(Sender: TObject);
begin
  ModalResult := mrOk;
end;

procedure TfrmCamara.lbCamListDblClick(Sender: TObject);
begin
  // Seleccionar cámara
  cam.SetDisplayCanvas(pbVideo.Canvas);
  cam.VideoStart(lbCamList.Items[lbCamList.ItemIndex]);
  // Activar el botón
  btnGrabarFrame.Enabled := (lbCamList.Count > 0);

end;

Gracias por su ayuda.

Neftali [Germán.Estévez] 30-05-2024 08:32:40

Pon puntos de ruptura en el código (Breakpoints) al inicio de cada procedimiento y ejecuta paso a paso.
A ver si detectas en qué línea o procedimiento te genera el "Access Violation".

Ahora veo que estás usando TVideoImage y me ha sonado que hace poco hablamos del tema.
Revisa este hilo,porque ahí estuvimos revisando y corrigiendo un código con ese componente para conectar a una webcam:
https://www.clubdelphi.com/foros/sho...ht=TVideoImage


Dentro está el código del proyecto.





Además si haces una búsquela en los foros, verás que hay más hilos sobre la utilización de ese componente:
https://www.clubdelphi.com/foros/sho...ht=TVideoImage
https://www.clubdelphi.com/foros/sho...ht=TVideoImage


La franja horaria es GMT +2. Ahora son las 21:48:43.

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