Ir para conteúdo
Fórum Script Brasil
  • 0

Capturar imagem de webcam


Gabriel Cabral

Pergunta

Oi gente...

Estou a um bom tempo procurando componentes e/ou funções que façam a captura de imagens de uma webcam..

Utilizei então o melhor que eu encontrei..

DECLARAÇÕES

var
Form1: TForm1;
hWndC : THandle = 0;

implementation

{$R *.dfm}
const WM_CAP_START = WM_USER;
const WM_CAP_STOP = WM_CAP_START + 68;
const WM_CAP_DRIVER_CONNECT = WM_CAP_START + 10;
const WM_CAP_DRIVER_DISCONNECT = WM_CAP_START + 11;
const WM_CAP_SAVEDIB = WM_CAP_START + 25;
const WM_CAP_GRAB_FRAME = WM_CAP_START + 60;
const WM_CAP_SEQUENCE = WM_CAP_START + 62;
const WM_CAP_FILE_SET_CAPTURE_FILEA = WM_CAP_START + 20;
const WM_CAP_SEQUENCE_NOFILE =WM_CAP_START+ 63;
const WM_CAP_SET_OVERLAY =WM_CAP_START+ 51;
const WM_CAP_SET_PREVIEW =WM_CAP_START+ 50;
const WM_CAP_SET_CALLBACK_VIDEOSTREAM = WM_CAP_START +6;
const WM_CAP_SET_CALLBACK_ERROR=WM_CAP_START +2;
const WM_CAP_SET_CALLBACK_STATUSA= WM_CAP_START +3;
const WM_CAP_SET_CALLBACK_FRAME= WM_CAP_START +5;
const WM_CAP_SET_SCALE=WM_CAP_START+ 53;
const WM_CAP_SET_PREVIEWRATE=WM_CAP_START+ 52;  04/08/07  Eduardo 

function capCreateCaptureWindowA(lpszWindowName : PCHAR; dwStyle : longint; x : integer;
y : integer;nWidth : integer;nHeight : integer;ParentWin : HWND; nId : integer): HWND; STDCALL; EXTERNAL 'AVICAP32.DLL';
CAPTURA
procedure TForm1.ToolButton1Click(Sender: TObject);
begin
if hWndC <> 0 then exit;
hWndC := capCreateCaptureWindowA('WebCam no Turbo Delphi',WS_CHILD or WS_VISIBLE ,Panel1.Left,Panel1.Top,320,240,Form1.Handle,0);
if hWndC <> 0 then
begin
SendMessage(hWndC, WM_CAP_SET_CALLBACK_VIDEOSTREAM, 0, 0);
SendMessage(hWndC, WM_CAP_SET_CALLBACK_ERROR, 0, 0);
SendMessage(hWndC, WM_CAP_SET_CALLBACK_STATUSA, 0, 0);
SendMessage(hWndC, WM_CAP_DRIVER_CONNECT, 0, 0);
SendMessage(hWndC, WM_CAP_SET_SCALE, 1, 0);
SendMessage(hWndC, WM_CAP_SET_PREVIEWRATE, 66, 0);
SendMessage(hWndC, WM_CAP_SET_OVERLAY, 1, 0);
SendMessage(hWndC, WM_CAP_SET_PREVIEW, 1, 0);
end;
end;
SALVA A IMAGEM CAPTURADA
procedure TForm1.ToolButton4Click(Sender: TObject);
begin
if hWndC <> 0 then
begin
SendMessage(hWndC,WM_CAP_SAVEDIB,0,longint(pchar('c:\teste.bmp')));
end;
end;

Fiz o teste em um computador que não tem webcam, mas tem uma placa de tv.

Foi capturado o vídeo, do que estava passando na tv, mesmo com o programa da tv desligado.

Quando fiz o teste em um notebook com webcam, foi capturado uma imagem preta, e não o que a webcam estava filmando.

Alguém pode me ajudar com isso???

Por que foi capturada uma imagem preta?

É preciso fazer alguma coisa com a webcam? Ligar? Ou ela já está ligada? (Desculpem a ignorância, mas nunca tive contato com webcam)

Muito obrigado.

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0
Quando fiz o teste em um notebook com webcam, foi capturado uma imagem preta, e não o que a webcam estava filmando.

Alguém pode me ajudar com isso???

Por que foi capturada uma imagem preta?

É preciso fazer alguma coisa com a webcam? Ligar? Ou ela já está ligada? (Desculpem a ignorância, mas nunca tive contato com webcam)

isso acontece porque a function capCreateCaptureWindowA esta capturando a parte fora da imagem, ou seja, esta capturando uma imagem fora dos pontos de amostragem da figura, por isso ela fica preta

1 - a camera deve estar conectada ao computador

2 - deve estar ligada e não conectada ao seu proprio programa ( programa que vem junto com a webcam )

3 - uma imagem capturada da webcam tem extensão .bmp e um tamanho aproximando de 1.4 Mb

4 - a imagem capturada deverá ser transformada de bmp em jpg, isso reduz seu tamanho para 50 Kb sem que perca resolução

5 - o componente de captura usado no delphi deve permitir a visualização da imagem webcam ao vivo

6 - caso pense em salvar a imagem em um banco de dados, use campo BLOB e salve como Stream

exemplo:

Saves the contents of the BLOB field to a stream.

procedure SaveToStream(Stream: TStream);

Description

Use SaveToStream to copy the contents of a BLOB field to a stream. Specify the name of the stream to which the field’s value is saved as the value of the Stream parameter.

var

  MS: TMemoryStream;
begin
  MS := TMemoryStream.Create;
  try
    Query1Images.SaveToStream(MS);
    Image1.Picture.Bitmap.LoadFromStream(MS);
  finally
    MS.Free;
  end;

end;

mais informações, faça uma busca no forum

http://scriptbrasil.com.br/forum/index.php...highlite=dspack

abraço

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...