Hat Ihr Computer eine Kamera? Überlegen Sie, wie Sie es erreichen können, wenn Sie andere mit QQ spielen sehen?
Hier stellen wir vor, dass die Verwendung von Delphi zur Verwendung von MS AVICAP32.Dll zur einfachen Implementierung der Kamera -Programmierung.
Wenn Sie Ihre Netzwerkprogrammierstufe hinzufügen, ist das Implementieren eines Video -Chats kein Problem.
Schauen Sie sich den folgenden Code an:
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
Funktion CapCreateCaptureWindowa (LPSZWindowname: pchar; dwstyle: longint; x: Integer;
Y: Ganzzahl; Nwidth: Integer; nHeight: Integer; Parentwin: hwnd;
NID: Ganzzahl): hwnd; stdcall externe 'avicap32.dll';
Der obige Code ist die Definition einer Funktion und Konstante, die wir hauptsächlich verwenden.
OK, öffnen Sie Ihr Delphi, erstellen Sie ein neues Projekt und fügen Sie die obige Definition hinzu.
Erstellen Sie ein neues Fenster, legen Sie ein Panel darauf, fügen Sie eine Schaltfläche hinzu und setzen Sie die Bildunterschrift auf "Start" ein.
Hier müssen Sie eine globale Variable, var hwndc: Thandle;
Der Code der Startschaltfläche lautet wie folgt:
Beginnen
hwndc: = capCreateCaptureWindowa ('mein eigenes Capture -Fenster', WS_Child oder WS_VISIBLE, Panel1.Left, Panel1.Top, Panel1.Width, Panel1.Height, Form1.Handle, 0);
hwndc: = capCreateCaptureWindowa ('mein eigenes Capture -Fenster', WS_Child oder WS_VISIBLE, Panel1.Left, Panel1.Top, Panel1.Width, Panel1.Height, Form1.Handle, 0);
Wenn hwndc <> 0 dann dann
Beginnen
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);
Ende;
Drücken Sie F9, um es auszuführen, wie wäre es mit dem Videobildschirm der Kamera?
Wie kann ich dann aufhören? Fügen Sie eine weitere Schaltfläche hinzu, um "Stopp"
Der Code ist wie folgt:
Wenn hwndc <> 0 dann beginnen
SendMessage (hwndc, wm_cap_driver_disconnect, 0, 0);
hwndc: = 0;
Ende;
Der Videobildschirm wurde gezeigt, wie kann ich ihn retten?
Das Folgende wird auf zwei Arten gespeichert, eine ist das statische BMP -Diagramm und das andere die AVI -Animation.
Setzen Sie drei Tasten in das Formular ein und setzen Sie die Bildunterschrift auf "BMP speichern", "Videoaufzeichnung starten" bzw. "Video -Aufnahme".
Die Codes der drei Tasten sind wie folgt:
// BMP speichern
Wenn hwndc <> 0 dann beginnen
SendMessage (hwndc, wm_cap_savedib, 0, longint (pChar ('c: //test.bmp')));
Ende;
// Videoaufzeichnung starten
Wenn hwndc <> 0 dann dann
Beginnen
SendMessage (hwndc, wm_cap_file_set_capture_filea, 0, longint (pchar ('c: //test.avi')));
SendMessage (hwndc, wm_cap_sequence, 0, 0);
Ende;
// Aufnahme einstellen
Wenn hwndc <> 0 dann beginnen
SendMessage (hwndc, wm_cap_stop, 0, 0);
Ende;
Führen Sie es noch einmal aus und schauen Sie sich an. . Sie können ein paar Bilder speichern, um sie zu sehen, oder Sie können sie in AVI aufnehmen und langsam genießen.
Programmlaufeffekt: [Verwandte Karten]
Der vollständige Programmcode lautet wie folgt:
Einheit Einheit1;
Schnittstelle
Verwendung
Fenster, Nachrichten, Systeme, Varianten, Klassen, Grafiken, Steuerelemente, Formulare,
Dialoge, stdctrls, extctrls;
Typ
Tform1 = Klasse (tform)
Panel1: tpanel;
Button1: Tbutton;
Button2: Tbutton;
Button3: Tbutton;
Button4: Tbutton;
Button5: Tbutton;
PROCEDURE Taste1Click (Absender: Tobject);
PROCEDURE Button2Click (Absender: Tobject);
PROCEDURE Button3Click (Absender: Tobject);
PROCEDURE Button4Click (Absender: Tobject);
PROCEDURE Taste5Click (Absender: Tobject);
ProzedurformClose (Absender: Tobject; var Aktion: tcloseaction);
Privat
Hwndc: Thandle;
öffentlich
{Öffentliche Erklärungen}
Ende;
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
Funktion capCreateCaptureWindowa (LPSZWindowname: pchar;
DwStyle: Longint; x: Integer; y: Integer; Nwidth: Ganzzahl;
NHELTH: Ganzzahl; Parentwin: hwnd; nid: Integer): hwnd;
Stdcall externe 'avicap32.dll';
Durchführung
{$ R *.dfm}
procedure tform1.button1click (Absender: tobject);
Beginnen
hwndc: = capCreateCaptureWindowa ('mein eigenes Capture -Fenster', WS_Child oder WS_VISIBLE, Panel1.Left, Panel1.Top, Panel1.Width, Panel1.Height, Form1.Handle, 0);
hwndc: = capCreateCaptureWindowa ('mein eigenes Capture -Fenster', WS_Child oder WS_VISIBLE, Panel1.Left, Panel1.Top, Panel1.Width, Panel1.Height, Form1.Handle, 0);
Wenn hwndc <> 0 dann dann
Beginnen
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);
Ende;
Ende;
procedure tform1.button2click (Absender: tobject);
Beginnen
Wenn hwndc <> 0 dann beginnen
SendMessage (hwndc, wm_cap_driver_disconnect, 0, 0);
hwndc: = 0;
Ende;
Ende;
procedure tform1.button3click (Absender: tobject);
Beginnen
Wenn hwndc <> 0 dann beginnen
SendMessage (hwndc, wm_cap_savedib, 0, longint (pChar ('c: //test.bmp')));
Ende;
Ende;
procedure tform1.button4click (Absender: tobject);
Beginnen
Wenn hwndc <> 0 dann dann
Beginnen
SendMessage (hwndc, wm_cap_file_set_capture_filea, 0, longint (pchar ('c: //test.avi')));
SendMessage (hwndc, wm_cap_sequence, 0, 0);
Ende;
Ende;
procedure tform1.button5click (Absender: tobject);
Beginnen
Wenn hwndc <> 0 dann beginnen
SendMessage (hwndc, wm_cap_stop, 0, 0);
Ende;
Ende;
procedure tform1.FormClose (Absender: tobject; var action: tcloseaction);
Beginnen
Wenn hwndc <> 0 dann beginnen
SendMessage (hwndc, wm_cap_driver_disconnect, 0, 0);
Ende;
Ende;
Ende.
Wenn der Computer keine Kamera hat, aber den Effekt des Programms sehen möchte, ist das dann in Ordnung?
Haha, natürlich finden Sie eine virtuelle Kamera und tun Sie es einfach.
Es kann als "echte" Kamera simuliert werden.
In Bezug auf die Kamera -Programmierung können Sie sich auch diesen Satz von VCL -Komponenten ansehen: DSpack. , 2000 und Windows XP.
Okay, lasst uns diese vorstellen. implementieren.