¿Tu computadora tiene una cámara? ¿Pensarás en cómo lograrlo cuando veas a otros jugando con QQ?
Aquí presentamos eso utilizando Delphi para usar MS AVICAP32.DLL para implementar fácilmente la programación de cámaras.
Si agrega su nivel de programación de red, implementar un chat de video no será un problema.
Consulte el código a continuación:
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
function CapCreateCaptureWindowa (lpszwindowname: pchar; dwstyle: longInt; x: integer;
y: entero; nwidth: entero; nheight: entero; parentwin: hwnd;
nid: entero): hwnd; stdcall externo 'avicap32.dll';
El código anterior es la definición de una función y constante que utilizamos principalmente.
Ok, abra su Delphi, cree un nuevo proyecto y agregue la definición anterior.
Cree una nueva ventana, coloque un panel, agregue un botón y configure la leyenda en "Inicio"
Aquí debe definir una variable global, var hwndc: thandle;
El código del botón de inicio es el siguiente:
Comenzar
hwndc: = CapCreateCaptureWindowa ('Mi propia ventana de captura', ws_child o ws_visible, panel1.left, panel1.top, panel1.width, panel1.height, form1.handle, 0);
hwndc: = CapCreateCaptureWindowa ('Mi propia ventana de captura', ws_child o ws_visible, panel1.left, panel1.top, panel1.width, panel1.height, form1.handle, 0);
Si hwndc <> 0 entonces
Comenzar
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);
fin;
Presione F9 para ejecutarlo, ¿qué tal?
Entonces, ¿cómo parar? Agregue otro título de botón para "parar"
El código es el siguiente:
Si hwndc <> 0 entonces comience
SendMessage (hwndc, wm_cap_driver_disconnect, 0, 0);
hwndc: = 0;
fin;
La pantalla de video fue proyectada, ¿cómo puedo guardarla?
Lo siguiente se guarda de dos maneras, uno es el diagrama estático BMP y el otro es la animación AVI.
Coloque tres botones en el formulario y configure la leyenda en "Guardar BMP", "Iniciar grabación de video" y "Stop Video Recording" respectivamente.
Los códigos de los tres botones son los siguientes:
// Guardar BMP
Si hwndc <> 0 entonces comience
SendMessage (HWNDC, WM_CAP_SAVEDIB, 0, longInt (pchar ('c: //test.bmp'));
fin;
// Iniciar grabación de video
Si hwndc <> 0 entonces
Comenzar
SendMessage (hwndc, wm_cap_file_set_capture_filea, 0, longint (pchar ('c: //test.avi')));
SendMessage (HWNDC, WM_CAP_SECHENCE, 0, 0);
fin;
// deja de grabar
Si hwndc <> 0 entonces comience
SendMessage (hwndc, wm_cap_stop, 0, 0);
fin;
Ejecutarlo de nuevo y echar un vistazo. . Puede guardar algunas fotos para ver, o puede grabarlas en AVI y disfrutarlas lentamente.
Efecto de ejecución del programa: [mapas relacionados]
El código completo del programa es el siguiente:
Unidad Unidad1;
interfaz
usos
Windows, mensajes, sysutils, variantes, clases, gráficos, controles, formularios,
Diálogo, stdctrls, extctrls;
tipo
TForm1 = class (tForm)
Panel1: Tpanel;
Botón 1: tbutton;
Button2: tbutton;
Button3: tbutton;
Button4: tbutton;
Button5: tbutton;
procedimiento botón1Click (remitente: tobject);
procedimiento Button2Click (remitente: tobject);
procedimiento Button3Click (remitente: tobject);
Button de procedimiento4Click (remitente: tobject);
procedimiento Button5Click (remitente: tobject);
procedimiento FormClose (remitente: tobject; VAR Acción: TCLoseAction);
Privado
HWNDC: Thandle;
público
{Declaraciones públicas}
fin;
varilla
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
function CapCreateCaptureWindowa (LPSZWindowname: PCHAR;
dwstyle: longint; x: integer; y: entero; nwidth: integer;
nheight: entero; parentwin: hwnd; nid: entero): hwnd;
Stdcall externo 'avicap32.dll';
Implementación
{$ R *.dfm}
procedimiento tForm1.Button1Click (remitente: tobject);
Comenzar
hwndc: = CapCreateCaptureWindowa ('Mi propia ventana de captura', ws_child o ws_visible, panel1.left, panel1.top, panel1.width, panel1.height, form1.handle, 0);
hwndc: = CapCreateCaptureWindowa ('Mi propia ventana de captura', ws_child o ws_visible, panel1.left, panel1.top, panel1.width, panel1.height, form1.handle, 0);
Si hwndc <> 0 entonces
Comenzar
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);
fin;
fin;
procedimiento tForm1.Button2Click (remitente: tobject);
Comenzar
Si hwndc <> 0 entonces comience
SendMessage (hwndc, wm_cap_driver_disconnect, 0, 0);
hwndc: = 0;
fin;
fin;
procedimiento tForm1.Button3Click (remitente: tobject);
Comenzar
Si hwndc <> 0 entonces comience
SendMessage (HWNDC, WM_CAP_SAVEDIB, 0, longInt (pchar ('c: //test.bmp'));
fin;
fin;
procedimiento tForm1.Button4Click (remitente: tobject);
Comenzar
Si hwndc <> 0 entonces
Comenzar
SendMessage (hwndc, wm_cap_file_set_capture_filea, 0, longint (pchar ('c: //test.avi')));
SendMessage (HWNDC, WM_CAP_SECHENCE, 0, 0);
fin;
fin;
procedimiento tForm1.Button5Click (remitente: tobject);
Comenzar
Si hwndc <> 0 entonces comience
SendMessage (hwndc, wm_cap_stop, 0, 0);
fin;
fin;
procedimiento tForm1.FormClose (remitente: tobject; VAR Action: tCLoseAction);
Comenzar
Si hwndc <> 0 entonces comience
SendMessage (hwndc, wm_cap_driver_disconnect, 0, 0);
fin;
fin;
fin.
Si la computadora no tiene una cámara pero quiere ver el efecto del programa, ¿está bien?
Jaja, por supuesto, puede encontrar una cámara virtual y simplemente hacerlo.
Se puede simular como una cámara "real".
Con respecto a la programación de la cámara, también puede echar un vistazo a este conjunto de componentes de VCL: DSPACK. , 2000 y Windows XP.
Bien, presentemos estos. para implementar.