Captura Foto da WebCam salvar caminho no banco de dados sem usar OpenDialog.
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.
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
Curtidas 0
Melhor post
Natanael Ferreira
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;
GOSTEI 1
Mais Respostas
Natanael Ferreira
06/06/2018
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;
GOSTEI 1
Natanael Oliveira
06/06/2018
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 !
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 !
GOSTEI 0
Raimundo Pereira
06/06/2018
Chama no Skype 13hrs
sac@p2tecnico.com.br
sac@p2tecnico.com.br
GOSTEI 0
Natanael Oliveira
06/06/2018
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 !
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 !
GOSTEI 0