Putain ! Il est encore planté ce bordel

24/04/2014

0

galera estou implementado um cadastro com foto no meu TCC onde nele
vai ter um local para tirar foto pela web can
com o componente Tcamera indicado aqui no forum

blz implementei no meu programa mas

quando inicia o form da esse erro

Putain ! Il est encore planté ce bordel

agluem sabe o que é ou se já tiver o codigo pronto me ajuda

é que o fila da gaita do meu cliente pediu
ESSE É O CÓDIGO DE TIRAR FOTO

procedure TFrmCapFoto.sbClick(Sender: TObject);
var
SR: TSearchRec;
I: integer;
begin

Camera1.FichierImage := dir+'\'+nn.Text+'.bmp';
Camera1.CaptureImageDisque;
BmpToJpg(dir+'\'+nn.Text);

img.Picture.LoadFromFile(dir+'\'+nn.Text+'.jpeg');
img.Picture.SaveToFile(dir+'\'+nn.Text+'.jpeg');



cco.Text := '1';

I := FindFirst(dir+'\*.bmp', faAnyFile, SR);
while I = 0 do begin if (SR.Attr and faDirectory) <> faDirectory then
if not DeleteFile(dir+'\' + SR.Name) then ShowMessage('Não foi possível excluir '+dir+'\' + SR.Name);
I := FindNext(SR);
end;

end;
Jose Silva

Jose Silva

Responder

Post mais votado

24/04/2014

Quando utilizei o TCamera também enfrentei o mesmo problema, e pesquisando na internet utilizei o código a seguir que usa DirectX e que resolveu meu problema.

http://www.delphibasics.info/home/delphibasicsprojects/directxdelphiwebcamcaptureexample/DirectXDelphiWebcamCapture.rar?attredirects=0

Cauê Nishijima

Cauê Nishijima
Responder

Mais Posts

28/05/2014

Erfelipe

Quando utilizei o TCamera também enfrentei o mesmo problema, e pesquisando na internet utilizei o código a seguir que usa DirectX e que resolveu meu problema.

http://www.delphibasics.info/home/delphibasicsprojects/directxdelphiwebcamcaptureexample/DirectXDelphiWebcamCapture.rar?attredirects=0


Cauê,

Sua dica foi valiosa. Realmente este fonte não dá problema porque deve fazer chamadas do DirectX. O TCamera funciona bem uma vez, depois ele dá esse problema da mensagem em francês.
Agora, preciso apenas de tirar uma foto e recuperar o JPEG. Você alterou o fonte? Dei uma olhada lá e não vi "onde" pegar a imagem. Se você fez um código para capturar uma imagem, poderia disponibilizar aqui?

Obrigado.
Responder

29/05/2014

Cauê Nishijima

Olá erfelipe, posso sim, primeiramente você precisa recuperar os Devices da WebCam, para isso populei um ComboBox com as webcams que possui na máquina:

  DevicesList := TStringList.Create;
  fVideoImage.GetListOfDevices(DevicesList);
  cbbDevices.Items := DevicesList;
  DevicesList.Free;


onde DevicesList é uma TStringList e fVideoImage é um TVideoImage

Ai você pode colocar um TImage e um botão para iniciar a captura:


procedure TfrmWebCam.iniciarCaptura;
var
  camdevice: string;
begin
  camdevice := Trim(cbbDevices.Items.Strings[cbbDevices.ItemIndex]);

  fVideoBitmap := TBitmap.Create;
  fVideoImage := TVideoImage.Create;

  fVideoImage.OnNewVideoFrame := OnNewVideoCanvas;

  fVideoImage.VideoStart(camdevice);
  fVideoImage.GetBitmap(fVideoBitmap);

  img1.Picture.Bitmap.Assign(fVideoBitmap);
  btnCancelarCaptura.Enabled := True;
end;

procedure TfrmWebCam.OnNewVideoCanvas(Sender: TObject; Width, Height: Integer;
  DataPtr: Pointer);
begin
  fVideoImage.GetBitmap(fVideoBitmap);
  img1.Picture.Bitmap.Canvas.Draw(0, 0, fVideoBitmap);
end;



E um outro botão pra capturar a foto:


procedure TfrmWebCam.tirarFoto;
var
  MyJPEG: TJPEGImage;
begin
  MyJPEG := TJPEGImage.Create;
  try
    MyJPEG.CompressionQuality := 65;

    fVideoImage.VideoStop;
    fVideoBitmap.SaveToFile('X');
    MyJPEG.Assign(Utils.BmpToJpeg('X'));
    img1.Picture.Assign(MyJPEG);
  finally
    FreeAndNil(fVideoBitmap);
    FreeAndNil(fVideoImage);

    MyJPEG.Free;
    DeleteFile('X');
  end;
end;



Acho que da pra usar Stream nesse código anterior, mas não me lembro porque enfrentei alguma dificuldade e resolvi fazer desse jeito.



Essa é a codificação básica pra se utilizar o componente, porém no meu código fiz umas "frescuras" a mais, só pra deixar mais bonito, como utilizar um único botão pra iniciar a webcam e tirar a foto, a opção de além de tirar uma foto escolher uma já existente, ter uma imagem padrão

[img]http://arquivo.devmedia.com.br/forum/imagem/276180-20140529-083507.png[/img]

Os botões azuis em cima da foto somem e aparecem de acordo com a posição do mouse e se possui ou não uma foto.

Espero que tenha ajudado um pouco, mas qualquer coisa é só perguntar
Responder

30/05/2014

Erfelipe

Valeu demais Cauê!

Fui atrás da lib e encontrei estes exemplos também: http://www.delphibasics.info/home/delphibasicsprojects/directxdelphiwebcamcaptureexample

Sua dica foi fora de série.

Obrigado.


Olá erfelipe, posso sim, primeiramente você precisa recuperar os Devices da WebCam, para isso populei um ComboBox com as webcams que possui na máquina:

  DevicesList := TStringList.Create;
  fVideoImage.GetListOfDevices(DevicesList);
  cbbDevices.Items := DevicesList;
  DevicesList.Free;


onde DevicesList é uma TStringList e fVideoImage é um TVideoImage

Ai você pode colocar um TImage e um botão para iniciar a captura:


procedure TfrmWebCam.iniciarCaptura;
var
  camdevice: string;
begin
  camdevice := Trim(cbbDevices.Items.Strings[cbbDevices.ItemIndex]);

  fVideoBitmap := TBitmap.Create;
  fVideoImage := TVideoImage.Create;

  fVideoImage.OnNewVideoFrame := OnNewVideoCanvas;

  fVideoImage.VideoStart(camdevice);
  fVideoImage.GetBitmap(fVideoBitmap);

  img1.Picture.Bitmap.Assign(fVideoBitmap);
  btnCancelarCaptura.Enabled := True;
end;

procedure TfrmWebCam.OnNewVideoCanvas(Sender: TObject; Width, Height: Integer;
  DataPtr: Pointer);
begin
  fVideoImage.GetBitmap(fVideoBitmap);
  img1.Picture.Bitmap.Canvas.Draw(0, 0, fVideoBitmap);
end;



E um outro botão pra capturar a foto:


procedure TfrmWebCam.tirarFoto;
var
  MyJPEG: TJPEGImage;
begin
  MyJPEG := TJPEGImage.Create;
  try
    MyJPEG.CompressionQuality := 65;

    fVideoImage.VideoStop;
    fVideoBitmap.SaveToFile('X');
    MyJPEG.Assign(Utils.BmpToJpeg('X'));
    img1.Picture.Assign(MyJPEG);
  finally
    FreeAndNil(fVideoBitmap);
    FreeAndNil(fVideoImage);

    MyJPEG.Free;
    DeleteFile('X');
  end;
end;



Acho que da pra usar Stream nesse código anterior, mas não me lembro porque enfrentei alguma dificuldade e resolvi fazer desse jeito.



Essa é a codificação básica pra se utilizar o componente, porém no meu código fiz umas "frescuras" a mais, só pra deixar mais bonito, como utilizar um único botão pra iniciar a webcam e tirar a foto, a opção de além de tirar uma foto escolher uma já existente, ter uma imagem padrão

[img]http://arquivo.devmedia.com.br/forum/imagem/276180-20140529-083507.png[/img]

Os botões azuis em cima da foto somem e aparecem de acordo com a posição do mouse e se possui ou não uma foto.

Espero que tenha ajudado um pouco, mas qualquer coisa é só perguntar
Responder

09/09/2014

Adriano Wolff

Boa noite caue...será que vc poderia me dizer qual o tipo desta variável: fVideoImage.GetListOfDevices(DevicesList); [Error] Unit1.pas(32): Undeclared identifier: 'fVideoImage'
Obrigado amigo, até logo.

Olá erfelipe, posso sim, primeiramente você precisa recuperar os Devices da WebCam, para isso populei um ComboBox com as webcams que possui na máquina:

  DevicesList := TStringList.Create;
  fVideoImage.GetListOfDevices(DevicesList);
  cbbDevices.Items := DevicesList;
  DevicesList.Free;


onde DevicesList é uma TStringList e fVideoImage é um TVideoImage

Ai você pode colocar um TImage e um botão para iniciar a captura:


procedure TfrmWebCam.iniciarCaptura;
var
  camdevice: string;
begin
  camdevice := Trim(cbbDevices.Items.Strings[cbbDevices.ItemIndex]);

  fVideoBitmap := TBitmap.Create;
  fVideoImage := TVideoImage.Create;

  fVideoImage.OnNewVideoFrame := OnNewVideoCanvas;

  fVideoImage.VideoStart(camdevice);
  fVideoImage.GetBitmap(fVideoBitmap);

  img1.Picture.Bitmap.Assign(fVideoBitmap);
  btnCancelarCaptura.Enabled := True;
end;

procedure TfrmWebCam.OnNewVideoCanvas(Sender: TObject; Width, Height: Integer;
  DataPtr: Pointer);
begin
  fVideoImage.GetBitmap(fVideoBitmap);
  img1.Picture.Bitmap.Canvas.Draw(0, 0, fVideoBitmap);
end;



E um outro botão pra capturar a foto:


procedure TfrmWebCam.tirarFoto;
var
  MyJPEG: TJPEGImage;
begin
  MyJPEG := TJPEGImage.Create;
  try
    MyJPEG.CompressionQuality := 65;

    fVideoImage.VideoStop;
    fVideoBitmap.SaveToFile('X');
    MyJPEG.Assign(Utils.BmpToJpeg('X'));
    img1.Picture.Assign(MyJPEG);
  finally
    FreeAndNil(fVideoBitmap);
    FreeAndNil(fVideoImage);

    MyJPEG.Free;
    DeleteFile('X');
  end;
end;



Acho que da pra usar Stream nesse código anterior, mas não me lembro porque enfrentei alguma dificuldade e resolvi fazer desse jeito.



Essa é a codificação básica pra se utilizar o componente, porém no meu código fiz umas "frescuras" a mais, só pra deixar mais bonito, como utilizar um único botão pra iniciar a webcam e tirar a foto, a opção de além de tirar uma foto escolher uma já existente, ter uma imagem padrão

[img]http://arquivo.devmedia.com.br/forum/imagem/276180-20140529-083507.png[/img]

Os botões azuis em cima da foto somem e aparecem de acordo com a posição do mouse e se possui ou não uma foto.

Espero que tenha ajudado um pouco, mas qualquer coisa é só perguntar
Responder

30/09/2014

Cauê Nishijima

Ola Adriano, desculpe a demora, tenho andado muito ocupado com um projeto.
Então pelo erro que deu parece que vc não declarou a variável fVideoImage....que é do tipo TVideoImage

Só declarar na sessão private...e depois instanciar normal no método iniciarCaptura.
Qualquer dúvida posta ai.
Responder

Assista grátis a nossa aula inaugural

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