Seu computador tem uma câmera? Você vai pensar em como alcançá -lo quando vir outros brincando com QQ?
Aqui, apresentamos que o uso do Delphi para usar o MS AVICAP32.DLL para implementar facilmente a programação da câmera.
Se você adicionar seu nível de programação de rede, a implementação de um bate -papo por vídeo não será um problema.
Confira o código abaixo:
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
função CapcreateCaptureWindowa (LPSZWindowname: PCHO; Dwstyle: Longint; X: Inteiro;
Y: Inteiro; NWidth: Inteiro; NHEight: Integer; Parentwin: HWND;
nid: inteiro): hwnd; stdcall externo 'avicap32.dll';
O código acima é a definição de uma função e constante que usamos principalmente.
OK, abra seu Delphi, crie um novo projeto e adicione a definição acima.
Crie uma nova janela, coloque um painel, adicione um botão e defina a legenda para "começar"
Aqui você precisa definir uma variável global, var hwndc: THANDLE;
O código do botão Iniciar é o seguinte:
Começar
hwnDC: = CapCreateCaptureWindowa ('Minha própria janela de captura', ws_child ou ws_visible, painel1.left, painel1.top, painel1.width, painel1.height, form1.handle, 0);
hwnDC: = CapCreateCaptureWindowa ('Minha própria janela de captura', ws_child ou ws_visible, painel1.left, painel1.top, painel1.width, painel1.height, form1.handle, 0);
se hwndc <> 0 então
Começar
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);
fim;
Pressione F9 para executá -lo, que tal? Você pode ver a tela de vídeo da câmera?
Então como parar? Adicione outra legenda do botão para "parar"
O código é o seguinte:
Se hwndc <> 0, então comece
SendMessage (hwndc, wm_cap_driver_disconnect, 0, 0);
hwnDC: = 0;
fim;
A tela de vídeo foi exibida, como posso salvá -la?
A seguir, é salvo de duas maneiras, uma é o diagrama estático da BMP e o outro é a animação AVI.
Coloque três botões no formulário e defina a legenda como "Salvar BMP", "Iniciar gravação de vídeo" e "Parar a gravação de vídeo", respectivamente.
Os códigos dos três botões são os seguintes:
// Salvar BMP
Se hwndc <> 0, então comece
SendMessage (hwndc, wm_cap_savedib, 0, longInt (pchar ('c: //test.bmp')));
fim;
// Inicie a gravação de vídeo
se hwndc <> 0 então
Começar
SendMessage (HWNDC, WM_CAP_FILE_SET_CAPTURE_FILEA, 0, LONGINT (PCHAR ('C: //test.avi')));
SendMessage (hwndc, wm_cap_sequence, 0, 0);
fim;
// Pare de gravar
Se hwndc <> 0, então comece
SendMessage (hwndc, wm_cap_stop, 0, 0);
fim;
Execute novamente e dê uma olhada. . Você pode salvar algumas fotos para ver, ou pode gravá -las em Avi e apreciá -las lentamente.
Efeito de execução do programa: [mapas relacionados]
O código completo do programa é o seguinte:
unidade de unidade1;
interface
usos
Janelas, mensagens, sysutils, variantes, classes, gráficos, controles, formulários,
Diálogos, stdctrls, extctrls;
tipo
Tform1 = classe (tform)
Painel1: tpanel;
Button1: tbutton;
Button2: tbutton;
Button3: tbutton;
Button4: tbutton;
Button5: tbutton;
Procedimento Button1Click (remetente: Tobject);
Procedimento Button2Click (remetente: Tobject);
Procedimento Button3Click (remetente: Tobject);
Procedimento Button4Click (remetente: Tobject);
Procedimento Button5Click (remetente: TOBJECT);
Procedimento FormClose (remetente: TOBJECT; VAR Action: TCLOSEACTION);
Privado
HWNDC: THANDLE;
público
{Declarações públicas}
fim;
var
Form1: TForm1;
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
função CapcreateCaptureWindowa (LPSZWindowname: PCHA;
dwstyle: longnt; x: inteiro; y: inteiro; nwidth: integer;
nheight: integer; parentwin: hwnd; nid: integer): hwnd;
Stdcall externo 'avicap32.dll';
Implementação
{$ R *.dfm}
procedimento TForm1.Button1Click (remetente: TOBJECT);
Começar
hwnDC: = CapCreateCaptureWindowa ('Minha própria janela de captura', ws_child ou ws_visible, painel1.left, painel1.top, painel1.width, painel1.height, form1.handle, 0);
hwnDC: = CapCreateCaptureWindowa ('Minha própria janela de captura', ws_child ou ws_visible, painel1.left, painel1.top, painel1.width, painel1.height, form1.handle, 0);
se hwndc <> 0 então
Começar
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);
fim;
fim;
procedimento TForm1.Button2Click (remetente: TOBJECT);
Começar
Se hwndc <> 0, então comece
SendMessage (hwndc, wm_cap_driver_disconnect, 0, 0);
hwnDC: = 0;
fim;
fim;
Procedimento TForm1.Button3Click (remetente: Tobject);
Começar
Se hwndc <> 0, então comece
SendMessage (hwndc, wm_cap_savedib, 0, longInt (pchar ('c: //test.bmp')));
fim;
fim;
procedimento TForm1.Button4Click (remetente: TOBJECT);
Começar
se hwndc <> 0 então
Começar
SendMessage (HWNDC, WM_CAP_FILE_SET_CAPTURE_FILEA, 0, LONGINT (PCHAR ('C: //test.avi')));
SendMessage (hwndc, wm_cap_sequence, 0, 0);
fim;
fim;
Procedimento TForm1.Button5Click (remetente: Tobject);
Começar
Se hwndc <> 0, então comece
SendMessage (hwndc, wm_cap_stop, 0, 0);
fim;
fim;
Procedimento TForm1.FormClose (remetente: TOBJECT; VAR Action: TCLOSEACTION);
Começar
Se hwndc <> 0, então comece
SendMessage (hwndc, wm_cap_driver_disconnect, 0, 0);
fim;
fim;
fim.
Se o computador não tiver uma câmera, mas deseja ver o efeito do programa, tudo bem?
Haha, é claro, você pode encontrar uma câmera virtual e apenas fazê -lo.
Ele pode ser simulado como uma câmera "real".
Em relação à programação da câmera, você também pode dar uma olhada nesse conjunto de componentes VCL: DSPACK. , 2000 e Windows XP.
Ok, vamos apresentar isso. para implementar.