Here is an easy implementation of the camera programming using Delphi using the Avicap32.dll using the MS. If you add your network programming level, you will not make any problems with a video chat. Take a look at the code of the code below:
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: integer; nWidth: integer; nHeight: integer; ParentWin: HWND; nId: integer): HWND; STDCALL EXTERNAL 'AVICAP32.DLL';
The above code is the definition of a function and constant of our main use.
Ok, open your Delphi, create a new project, add the definition above.
Create a window, put a panel, add a button, and the CAPTION is set to "Start" here you need to define a global variable, Var hwndc: thandle;
The start button code is as follows:
BeginhWndc: = CapcreateCaptureWindowa ('My OWN Capture Window', WS_CHILD OR WS_VISIBLE, PANEL1.WIDTH, PANEL1.HEIGHT, FORM1.HANDLE, 0);
hWndC: = capCreateCaptureWindowA ( 'My Own Capture Window', WS_CHILD or WS_VISIBLE, Panel1.Left, Panel1.Top, Panel1.Width, Panel1.Height, Form1.Handle, 0); if hWndC <> 0 then beginSendMessage (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; press F9 to run, how, is it possible to see the camera? Is the screen? How can I stop? Then add a button CAPTION to "stop" code as follows: if hwndc <> 0 THENSENDMESSAGE (HWNDC, WM_CAP_DRIVER_DISCONNECT, 0, 0); hWndc: = 0;
The view is intercepted, how can I save it?
The following is saved in two ways, one is a BMP static diagram, one is an AVI animation.
Play three buttons to the form, CAPTION is set to "save BMP", "Start Recording", "Start Recording", and the code of the three buttons of the "Stop Recording" is as follows:
/ / Save Bmpif HWNDC <> 0 Then BegipmentMessage (HWNDC, WM_CAP_SAVEDIB, 0, Longint (pchar ('c: //test.bmp')));
// Start Video IF HWNDC <> 0 THENBEGINSENDMESSAGE (HWNDC, WM_CAP_FILE_SET_CAPTURE_FILEA, 0, LONGINT (PCHAR ('c: //test.avi'))); sendMessage (hwndc, wm_cap_sequence, 0, 0);
// Stop recording if hwndc <> 0 THEN BegipmentMessage (HWNDC, WM_CAP_STOP, 0, 0); END;
Run it again. . You can save a few pictures, you can also enjoy it after recording AVI.
Program operation: [related map] http://yousoft.hi.com.cn/UPload/forum/2004715161959.jpg
The complete program code is as follows:
Unit unit1;
Interface
Useswindows, Messages, Sysutils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Stdctrls, ExtCtrls
typeTForm1 = class (TForm) Panel1: TPanel; Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; Button5: TButton; procedure Button1Click (Sender: TObject); procedure Button2Click (Sender: TObject); procedure Button3Click (Sender : TObject); procedure Button4Click (Sender: TObject); procedure Button5Click (Sender: TObject); procedure FormClose (Sender: TObject; var Action: TCloseAction); privatehWndC: THandle; public {public declarations} end; varForm1: 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: integer; nWidth: integer; nHeight: integer; ParentWin: HWND; nId: integer): HWND; STDCALL EXTERNAL 'AVICAP32.DLL';
IMPLEMENTATION
{$ R * .dfm}
procedure TForm1.Button1Click (Sender: TObject); beginhWndC: = capCreateCaptureWindowA ( 'My Own Capture Window', WS_CHILD or WS_VISIBLE, Panel1.Left, Panel1.Top, Panel1.Width, Panel1.Height, Form1.Handle, 0); hWndC : = capCreateCaptureWindowA ( 'My Own Capture Window', WS_CHILD or WS_VISIBLE, Panel1.Left, Panel1.Top, Panel1.Width, Panel1.Height, Form1.Handle, 0); if hWndC <> 0 then beginSendMessage (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;
Procedure TForm1.Button2Click (Sender: Tobject); Beginif HWNDC <> 0 THEN BegipmentMessage (HWNDC, WM_CAP_DRIVER_DISCONNECT, 0, 0); hWndc: = 0; END;
Procedure TForm1.Button3Click (Sender: TOBJECT); Beginif HWNDC <> 0 THEN BEGINSENDMESSAGE (HWNDC, WM_CAP_SAVEDIB, 0, LONGINT (PCHAR ('c: //test.bmp')); end;
procedure TForm1.Button4Click (Sender: TObject); beginif hWndC <> 0 thenbeginSendMessage (hWndC, WM_CAP_FILE_SET_CAPTURE_FILEA, 0, Longint (pchar ( 'c: //test.avi'))); SendMessage (hWndC, WM_CAP_SEQUENCE, 0, 0) ;
Procedure tForm1.Button5Click (Sender: Tobject); Beginif HWNDC <> 0 THEN BEGInsendMessage (HWNDC, WM_CAP_STOP, 0, 0); END;
Procedure TForm1.FormClose (Sender: Tclosection); Beginif HWNDC <> 0 Then BegipmentMessage (HWNDC, WM_CAP_DRIVER_DISCONNECT, 0, 0); END;
End.
If the computer does not have a camera, you want to see the effect of the program, can you? Oh, of course, you can find a virtual camera, you can try SoftCam software. It is a veritable software camera that can simulate "real" camera, remind you, don't use this Dongdong Deceive MM or GG on chat software such as QQ, MSN. With regard to camera programming, you can also look at this group of VCL components: DSPACK, DSPack is a set of class and components that use Microsoft Direct Show and DirectX technology, design work in DirectX 9, support system Win9x, ME, 2000, and Windows XP. Ok, let's introduce these, as for how to achieve the video screen, look at you, nothing more than the data compression is transferred to each other, showing it, but said that it seems simple, it is still a bit difficult. This is the download address author! Http://yousoft.hi.com.cn/UPload/forum/2004715170626.rar