Captura Foto da WebCam salvar caminho no banco de dados sem usar OpenDialog.

06/06/2018

0

Boa noite amigos !

por gentileza !

tenho um sistema de cadastro com foto já funciona algum tempo normalmente, no momento estou tentando melhorar a funcionalidade do sistema,
pois bem ! no meu form de cadastro tem dois botões, um botão bater foto e outro procurar foto, no bater foto, tenho a rotina abaixo onde eu consigo capturar foto da minha webcam e salvo em uma pasta em meu sistema:

procedure TForm1.btn1Click(Sender: TObject);
var
MyJPEG : TJPEGImage;
JPEGFName, formattedDateTime: string;
I :Integer;
begin
if fActivated then
begin
// Pega o frame atual da webcam em bitmap
fVideoImage.OnNewVideoFrame := OnNewVideoFrame;
// Envia o bitmap do frame atual para o component Timage
img1.Picture.Bitmap.Assign(fVideoBitmap);

formattedDateTime := FormatDateTime(''d_m_yyyy_hh_nn_ss'',(Now)); // Gerador de nomes para o JPG com data e horário.
MyJPEG := TJPEGImage.Create; // Cria uma imagem JPG
JPEGFName:=PathExec+formattedDateTime+''.jpg''; // Cria todo caminho onde a imagem JPG será salva

try
MyJPEG.Assign(fVideoBitmap); // Atribui o bitimap frame no JPG
MyJPEG.SaveToFile(JPEGFName); // Salva o JPG no diretório
finally
MyJPEG.Free; // Libera o JPG da memória.
end;

end
else
ShowMessage(''A Webcam precisa estar ligada!'');
end;

Já no botão procurar foto, tenho a rotina abaixo, onde eu consigo procurar a foto que foi capturada, e salvar o caminho no meu banco de dados,

procedure TForm1.SpeedButton1Click(Sender: TObject);

// Variável que irá armazenar o caminho da imagem.
var path: string;
begin
// Coloca a tabela em modo de edição.
DM.ADOTCAD.Edit;
// Limpa o objeto Image.
img2.Picture := Nil;
OpenDialog1.Execute;
// Armazena o caminho e o nome do arquivo na variável.
path:= ExtractFilePATH(OpenDialog1.FileName);
path:= path + ExtractFileName(OpenDialog1.FileName);
// Inseri o caminho completo do arquivo no campo PATH.
DM.ADOTCADFOTO.Value := path;


end;

Minha duvida é :
COMO EU PODERIA JUNTAR ESTAS DUAS ROTINAS EM UMA SÓ, FAZENDO COM QUE APOS CLICAR NO BOTÃO (btn1 ), BOTÃO ESSE QUE CAPTURA A FOTO DA WEBCAM APARECER NO ( img2 ) QUE É COMPONENTE Timage, E SALVAR O CAMINHO NO BANCO DE DADOS COMO EU JÁ FAÇO HOJE POREM SEM AJUDA DE UM OPENDIALOG ?;

Desde já agradeço.
Natanael Oliveira

Natanael Oliveira

Responder

Post mais votado

07/06/2018

Faça um teste com o código abaixo, no evento OnClick do botão btn1:

var
  MyJPEG: TJPEGImage;
  JPEGFName, formattedDateTime: string;
  I: Integer;
begin
  if fActivated then
  begin
    // Pega o frame atual da webcam em bitmap
    fVideoImage.OnNewVideoFrame := OnNewVideoFrame;

    // Envia o bitmap do frame atual para o component Timage
    img1.Picture.Bitmap.Assign(fVideoBitmap);
    img2.Picture.Bitmap.Assign(fVideoBitmap);

    formattedDateTime := FormatDateTime('d_m_yyyy_hh_nn_ss', (Now));

    // Gerador de nomes para o JPG com data e horário.
    MyJPEG := TJPEGImage.Create; // Cria uma imagem JPG
    JPEGFName := PathExec + formattedDateTime + '.jpg';

    // Cria todo caminho onde a imagem JPG será salva
    try
      MyJPEG.Assign(fVideoBitmap); // Atribui o bitimap frame no JPG
      MyJPEG.SaveToFile(JPEGFName); // Salva o JPG no diretório
    finally
      MyJPEG.Free; // Libera o JPG da memória.
    end;

    // Salvar caminho da imagem no banoo
    with ADOTCAD do
    begin
      Edit;
      FieldByName('FOTO').Value := JPEGFName;
      Post;
    end;
  end
  else
    ShowMessage('A Webcam precisa estar ligada!');
end;

Natanael Ferreira

Natanael Ferreira
Responder

Mais Posts

07/06/2018

Natanael Ferreira

Uma correção na referência a tabela para DM.ADOTCAD:

var 
  MyJPEG: TJPEGImage; 
  JPEGFName, formattedDateTime: string; 
  I: Integer; 
begin 
  if fActivated then 
  begin 
    // Pega o frame atual da webcam em bitmap 
    fVideoImage.OnNewVideoFrame := OnNewVideoFrame; 

    // Envia o bitmap do frame atual para o component Timage 
    img1.Picture.Bitmap.Assign(fVideoBitmap); 
    img2.Picture.Bitmap.Assign(fVideoBitmap); 

    formattedDateTime := FormatDateTime('d_m_yyyy_hh_nn_ss', (Now)); 

    // Gerador de nomes para o JPG com data e horário. 
    MyJPEG := TJPEGImage.Create; // Cria uma imagem JPG 
    JPEGFName := PathExec + formattedDateTime + '.jpg'; 

    // Cria todo caminho onde a imagem JPG será salva 
    try 
      MyJPEG.Assign(fVideoBitmap); // Atribui o bitimap frame no JPG 
      MyJPEG.SaveToFile(JPEGFName); // Salva o JPG no diretório 
    finally 
      MyJPEG.Free; // Libera o JPG da memória. 
    end; 

    // Salvar caminho da imagem no banco 
    with DM.ADOTCAD do 
    begin 
      Edit; 
      FieldByName('FOTO').Value := JPEGFName; 
      Post; 
    end; 
  end 
  else 
    ShowMessage('A Webcam precisa estar ligada!'); 
end;
Responder

09/06/2018

Natanael Oliveira

Olá Bom dia !!

Fiz alguns teste com o código acima, no evento OnClick do botão btn1: porem ocorreu alguns erros como poderia solucionar isso ?:

Erros
Undeclared identifier ' if at line 375 (375:1)
Expected ','but received an identifier 'fActivated' at line 375 (375:8)
Expected END but received THEN at line 375 (375:19)
Expected the end of but received an identifier 'OnNewVideoFrame' at line 378 (378:21)




Desde já agradeço ajuda !
Responder

09/06/2018

Raimundo Pereira

Chama no Skype 13hrs
sac@p2tecnico.com.br
Responder

09/06/2018

Natanael Oliveira

Bom dia meu amigo !!

consegui resolver com esta rotina abaixo,

var
MyJPEG: TJPEGImage;
JPEGFName, formattedDateTime: string;
I: Integer;
begin
if fActivated then
begin
// Pega o frame atual da webcam em bitmap
fVideoImage.OnNewVideoFrame := OnNewVideoFrame;

// Envia o bitmap do frame atual para o component Timage
img1.Picture.Bitmap.Assign(fVideoBitmap);
img2.Picture.Bitmap.Assign(fVideoBitmap);

formattedDateTime := FormatDateTime('d_m_yyyy_hh_nn_ss', (Now));

// Gerador de nomes para o JPG com data e horário.
MyJPEG := TJPEGImage.Create; // Cria uma imagem JPG
JPEGFName := PathExec + formattedDateTime + '.jpg';

// Cria todo caminho onde a imagem JPG será salva
try
MyJPEG.Assign(fVideoBitmap); // Atribui o bitimap frame no JPG
MyJPEG.SaveToFile(JPEGFName); // Salva o JPG no diretório
finally
MyJPEG.Free; // Libera o JPG da memória.
end;

// Salvar caminho da imagem no banco
with DM.ADOTCAD do
begin
Edit;
FieldByName('FOTO').Value := JPEGFName;
Post;
end;
end
else
ShowMessage('A Webcam precisa estar ligada!');
end;


Desde já agradeço por dedicar um pouco do seu tempo para ajudar,
muito obrigado mesmo e um Forte abraço !
Responder

APRENDA A PROGRAMAR DO ZERO AO PROFISSIONAL

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar