Delphi - объектно-ориентированный язык программирования, разработанный компанией Borland в 1995 году. Он основан на языке программирования Pascal, но имеет более расширенные возможности и добавлены новые функции.
Delphi является интегрированной средой разработки (IDE), которая позволяет разрабатывать программное обеспечение для различных платформ, включая Windows, macOS, Android и iOS. Delphi достигает многоплатформенности с помощью...
Для использования следующиего примера необходимо иметь "Microsoft Video for Windows SDK". Пример показывает, как открыть видео устройство для захвата видео, как сграбить фрейм с устройства, как сохранить этот фрейм на диск в виде файла .BMP, как записать .AVI файл (со звуком, но без предварительного просмотра), и как закрыть устройство.
Замечание: Для работы примера необходимо иметь установленное устройство захвата видео (video capture device).
Пример:
unitUnit1; interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls; type
TForm1 = class
(TForm) Panel1: TPanel; OpenVideo: TButton; CloseVideo: TButton; GrabFrame: TButton; SaveBMP: TButton; StartAVI: TButton; StopAVI: TButton; SaveDialog1: TSaveDialog; procedure
FormCreate(Sender: TObject); procedure
OpenVideoClick(Sender: TObject); procedure
CloseVideoClick(Sender: TObject); procedure
GrabFrameClick(Sender: TObject); procedure
SaveBMPClick(Sender: TObject); procedure
StartAVIClick(Sender: TObject); procedure
StopAVIClick(Sender: TObject); private
{ Private declarations } hWndC: THandle; CapturingAVI: bool; public
{ Public declarations } end
; var
Form1: TForm1; implementation
{$R *.DFM} 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; function
capCreateCaptureWindowA(lpszWindowName: PCHAR; dwStyle: longint; x: integer; y: integer; nWidth: integer; nHeight: integer; ParentWin: HWND; nId: integer): HWND; stdcall
external
'AVICAP32.DLL'; procedure
TForm1.FormCreate(Sender: TObject); begin
CapturingAVI := false
; hWndC := 0; SaveDialog1.Options := [ofHideReadOnly, ofNoChangeDir, ofPathMustExist] end
; procedure
TForm1.OpenVideoClick(Sender: TObject); begin
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
SendMessage(hWndC, WM_CAP_DRIVER_CONNECT, 0, 0); end
; procedure
TForm1.CloseVideoClick(Sender: TObject); begin
if
hWndC <> 0 then
begin
SendMessage(hWndC, WM_CAP_DRIVER_DISCONNECT, 0, 0); hWndC := 0; end
; end
; procedure
TForm1.GrabFrameClick(Sender: TObject); begin
if
hWndC <> 0 then
SendMessage(hWndC, WM_CAP_GRAB_FRAME, 0, 0); end
; procedure
TForm1.SaveBMPClick(Sender: TObject); begin
if
hWndC <> 0 then
begin
SaveDialog1.DefaultExt := 'bmp'; SaveDialog1.Filter := 'Bitmap files (*.bmp)|*.bmp'; if
SaveDialog1.Execute then
SendMessage(hWndC, WM_CAP_SAVEDIB, 0, longint(pchar(SaveDialog1.FileName))); end
; end
; procedure
TForm1.StartAVIClick(Sender: TObject); begin
if
hWndC <> 0 then
begin
SaveDialog1.DefaultExt := 'avi'; SaveDialog1.Filter := 'AVI files (*.avi)|*.avi'; if
SaveDialog1.Execute then
begin
CapturingAVI := true
; SendMessage(hWndC, WM_CAP_FILE_SET_CAPTURE_FILEA, 0, Longint(pchar(SaveDialog1.FileName))); SendMessage(hWndC, WM_CAP_SEQUENCE, 0, 0); end
; end
; end
; procedure
TForm1.StopAVIClick(Sender: TObject); begin
if
hWndC <> 0 then
begin
SendMessage(hWndC, WM_CAP_STOP, 0, 0); CapturingAVI := false
; end
; end
; end
.