Caro Claudio Aqui apresento uma solução minha, testada e funcionando perfeitamente em Delphi 7 e Delphi 2009. Comentei em português e inglês, para quem quiser optar. Espero que te atenda. Wellington Gomes de Andrade - Eng. {------------------------------------------------------------------------------
Procedure "cap_foto_webcam"
Captura e salva em arquivo bitmap um só frame (foto) da webcam
Capture and save only one frame (photo) to bitmap file
Autor: Wellington Gomes de Andrade - Eng.
Em: 18/12/2010
Empresa: Automata Tecnologia - www.automataa.com.br
email: wellauto@hotmail.com
-----------------------------------------------------------------------------}
procedure TFCaptura.cap_foto_webcam;
var
hWnd: THandle;
bmp: TBitmap;
formatoBmp: word;
ADado: THandle;
APalette: HPALETTE;
begin
bmp:=TBitmap.Create;
try
{ Cria o formato bitmap para o clipboard }
{ Create bitmap format to clipboard }
bmp.SaveToClipboardFormat(formatoBmp,ADado,APalette);
ClipBoard.SetAsHandle(formatoBmp,ADado);
{ Limpa o objeto TImage }
{ Clear TImage object }
Image1.Picture.Assign(nil);
Image1.Refresh;
{ Registro do formato Bitmap }
{ Register bitmap format }
Image1.Picture.RegisterClipboardFormat(CF_BITMAP,TBitmap);
{ Handle da criação da janela de captura}
{ Creation window Handle}
hWnd:=capCreateCaptureWindow('ImagemWebCam', //Janela(window) de captura
WS_CHILD, //Child (Form)
0,0, //Esq(Left), cima(top)
640,480, //Larg(width),Altu(height)
FCaptura.Handle, //Form(parent) Handle
0); //ID janela (window)
if hWnd <> 0 then begin
{ Se janela foi criada com sucesso, conectá-la }
{ If window created, connect to }
if capDriverConnect(hWnd,0) then begin
{ Se conexão com janela foi efetuada }
{ If connected successfully }
try
if capGrabFrame(hWnd) then begin
{ Se capturou um frame }
{ If frame captured }
if capEditCopy(hWnd) then begin
{ Se salvou o frame capturado para o clipboard }
{ If clipboard saved frame}
bmp.LoadFromClipboardFormat(CF_BITMAP,
ClipBoard.GetAsHandle(CF_BITMAP),0);
bmp.SaveToFile('d:\fotos\imgwebcam.bmp');
end;
end;
finally
capDriverDisconnect(hWnd);
end;
end;
end;
with Image1 do begin
Width:=440;
Height:=330;
Stretch:=true;
Picture.LoadFromFile('d:\fotos\imgwebcam.bmp');
end;
finally
bmp.Free;
ClipBoard.Clear;
end;
end;