Votre ordinateur a-t-il une caméra? Allez-vous réfléchir à la façon de le réaliser lorsque vous en voyez d'autres jouer avec QQ?
Ici, nous présentons que l'utilisation de Delphi pour utiliser MS AVICAP32.dll pour implémenter facilement la programmation de la caméra.
Si vous ajoutez votre niveau de programmation réseau, l'implémentation d'un chat vidéo ne sera pas un problème.
Consultez le code ci-dessous:
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
Fonction CapCreateCaptureWindowa (lpszwindowname: phar; dwstyle: longint; x: entier;
y: entier; nwidth: entier; nheight: entier; parentwin: hwnd;
NID: entier): hwnd; stdcall externe «avicap32.dll»;
Le code ci-dessus est la définition d'une fonction et d'une constante que nous utilisons principalement.
OK, ouvrez votre Delphi, créez un nouveau projet et ajoutez la définition ci-dessus.
Créez une nouvelle fenêtre, mettez un panneau dessus, ajoutez un bouton et définissez la légende pour "démarrer"
Ici, vous devez définir une variable globale, var hwndc: thandle;
Le code du bouton Démarrer est le suivant:
Commencer
HWNDC: = CapCreateCaptureWindowa («Ma propre fenêtre de capture», WS_CHILD ou WS_VISIBLE, PANNEL1.LEFT, PANNEL1.TOP, PANNEL1.WIDTH, PANNEL1.HEIGHT, FORM1.HANDLE, 0);
HWNDC: = CapCreateCaptureWindowa («Ma propre fenêtre de capture», WS_CHILD ou WS_VISIBLE, PANNEL1.LEFT, PANNEL1.TOP, PANNEL1.WIDTH, PANNEL1.HEIGHT, FORM1.HANDLE, 0);
Si hwndc <> 0 alors
Commencer
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;
Appuyez sur F9 pour l'exécuter, qu'en est-il?
Alors comment s'arrêter? Ajoutez une autre légende de bouton pour "arrêter"
Le code est le suivant:
Si hwndc <> 0 alors commencez
SendMessage (hwndc, wm_cap_driver_disconnect, 0, 0);
hwndc: = 0;
fin;
L'écran vidéo a été projeté, comment puis-je l'enregistrer?
Ce qui suit est enregistré de deux manières, l'une est le diagramme statique BMP et l'autre est l'animation AVI.
Mettez trois boutons sur le formulaire et définissez la légende pour "Enregistrer BMP", "Démarrer l'enregistrement vidéo" et "Stop Video Recording" respectivement.
Les codes des trois boutons sont les suivants:
// Enregistrer BMP
Si hwndc <> 0 alors commencez
SendMessage (hwndc, wm_cap_savedib, 0, longInt (phar ('c: //test.bmp')));
fin;
// Démarrer l'enregistrement vidéo
Si hwndc <> 0 alors
Commencer
SendMessage (hwndc, wm_cap_file_set_capture_filea, 0, longint (phar ('c: //test.avi')));
SendMessage (hwndc, wm_cap_sequence, 0, 0);
fin;
// arrêter l'enregistrement
Si hwndc <> 0 alors commencez
SendMessage (hwndc, wm_cap_stop, 0, 0);
fin;
Exécutez à nouveau et jetez un œil. . Vous pouvez enregistrer quelques photos pour voir, ou vous pouvez les enregistrer dans AVI et les profiter lentement.
Effet de fonctionnement du programme: [Cartes connexes]
Le code du programme complet est le suivant:
unité unité 1;
interface
usages
Windows, messages, systèmes, variantes, classes, graphiques, contrôles, formulaires,
Dialogues, stdctrls, extctrls;
taper
Tform1 = classe (tform)
Panel1: Tpanel;
Button1: Tbutton;
Button2: TBUTTON;
Button3: Tbutton;
Button4: Tbutton;
Button5: Tbutton;
Procédure Button1Click (expéditeur: tobject);
Procédure Button2Click (expéditeur: tobject);
Procédure Button3Click (expéditeur: tobject);
Procédure Button4Click (expéditeur: tobject);
Procédure Button5Click (expéditeur: tobject);
Procédure FormClose (expéditeur: tobject; var action: tcloseAction);
Privé
Hwndc: Thandle;
publique
{Déclarations publiques}
fin;
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
Fonction CapCreateCaptureWindowa (lpszwindowname: pChar;
dwstyle: longint; x: entier; y: entier; nwidth: entier;
nheight: entier; parentwin: hwnd; nid: entier): hwnd;
Stdcall externe 'avicap32.dll';
Mise en œuvre
{$ R * .dfm}
Procédure tform1.button1Click (expéditeur: tobject);
Commencer
HWNDC: = CapCreateCaptureWindowa («Ma propre fenêtre de capture», WS_CHILD ou WS_VISIBLE, PANNEL1.LEFT, PANNEL1.TOP, PANNEL1.WIDTH, PANNEL1.HEIGHT, FORM1.HANDLE, 0);
HWNDC: = CapCreateCaptureWindowa («Ma propre fenêtre de capture», WS_CHILD ou WS_VISIBLE, PANNEL1.LEFT, PANNEL1.TOP, PANNEL1.WIDTH, PANNEL1.HEIGHT, FORM1.HANDLE, 0);
Si hwndc <> 0 alors
Commencer
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;
Procédure tform1.button2click (expéditeur: tobject);
Commencer
Si hwndc <> 0 alors commencez
SendMessage (hwndc, wm_cap_driver_disconnect, 0, 0);
hwndc: = 0;
fin;
fin;
Procédure TForm1.Button3Click (expéditeur: tobject);
Commencer
Si hwndc <> 0 alors commencez
SendMessage (hwndc, wm_cap_savedib, 0, longInt (phar ('c: //test.bmp')));
fin;
fin;
Procédure tform1.button4click (expéditeur: tobject);
Commencer
Si hwndc <> 0 alors
Commencer
SendMessage (hwndc, wm_cap_file_set_capture_filea, 0, longint (phar ('c: //test.avi')));
SendMessage (hwndc, wm_cap_sequence, 0, 0);
fin;
fin;
Procédure tform1.button5click (expéditeur: tobject);
Commencer
Si hwndc <> 0 alors commencez
SendMessage (hwndc, wm_cap_stop, 0, 0);
fin;
fin;
Procédure tform1.formClose (expéditeur: tobject; var action: tcloseAction);
Commencer
Si hwndc <> 0 alors commencez
SendMessage (hwndc, wm_cap_driver_disconnect, 0, 0);
fin;
fin;
fin.
Si l'ordinateur n'a pas de caméra mais veut voir l'effet du programme, est-ce OK?
Haha, bien sûr, vous pouvez trouver une caméra virtuelle et le faire.
Il peut être simulé comme un "vrai" appareil photo.
En ce qui concerne la programmation de la caméra, vous pouvez également jeter un œil à cet ensemble de composants VCL: DSPACK. , 2000 et Windows XP.
D'accord, présentons-les. pour implémenter.