Putain ! Il est encore planté ce bordel

Delphi

24/04/2014

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

Curtidas 0

Melhor post

Cauê Nishijima

Cauê Nishijima

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
GOSTEI 1

Mais Respostas

Erfelipe

Erfelipe

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ê,

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.
GOSTEI 0
Cauê Nishijima

Cauê Nishijima

24/04/2014

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
GOSTEI 1
Erfelipe

Erfelipe

24/04/2014

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
GOSTEI 0
Adriano Wolff

Adriano Wolff

24/04/2014

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
GOSTEI 0
Cauê Nishijima

Cauê Nishijima

24/04/2014

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.
GOSTEI 0
POSTAR