Delphi 控制摄像头操作
2020-12-23 17:32
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, MPlayer;
type
TForm1 = class(TForm)
Button1: TButton;
Panel1: TPanel;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
Button6: TButton;
Button7: TButton;
OpenDialog1: TOpenDialog;
MediaPlayer1: TMediaPlayer;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button7Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
hWndC : THandle;
implementation
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‘;
{$R *.dfm}
procedure TForm1.Button1Click(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_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_SEQUENCE_NOFILE, 1, 0);
SendMessage(hWndC, WM_CAP_SET_OVERLAY, 1, 0);
SendMessage(hWndC, WM_CAP_SET_PREVIEW, 1, 0);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
if hWndC 0 then begin
SendMessage(hWndC, WM_CAP_DRIVER_DISCONNECT, 0, 0);
hWndC := 0;
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
if hWndC 0 then begin
SendMessage(hWndC,WM_CAP_SAVEDIB,0,longint(pchar(‘c:\\test.bmp‘)));
end;
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
if hWndC 0 then
begin
SendMessage(hWndC,WM_CAP_FILE_SET_CAPTURE_FILEA,0, Longint(pchar(‘c:\\test.avi‘)));
SendMessage(hWndC, WM_CAP_SEQUENCE, 0, 0);
end;
end;
procedure TForm1.Button5Click(Sender: TObject);
begin
if hWndC 0 then begin
SendMessage(hWndC, WM_CAP_STOP, 0, 0);
end;
end;
procedure TForm1.Button7Click(Sender: TObject);
begin
openDialog1.DefaultExt := ‘avi‘;
openDialog1.Filter := ‘avi files (*.avi)|*.avi‘;
if OpenDialog1.Execute then
begin
if (MediaPlayer1.DeviceID0) then
begin
if (MediaPlayer1.Mode=mpplaying) then MediaPlayer1.Stop;
end;
MediaPlayer1.FileName:=openDialog1.FileName;
//MediaPlayer1.DisplayRect.Top:=panel2.Top;
//MediaPlayer1.DisplayRect.Left:=panel2.left;
//MediaPlayer1.DisplayRect.Right:=panel2.Height;
//MediaPlayer1.DeviceType :=dtAutoSelect;
Mediaplayer1.Open;
MediaPlayer1.Play;
end;
end;
procedure TForm1.Button6Click(Sender: TObject);
begin
close;
end;
end.
//= == =====================
object Form1: TForm1
Left = 192
Top = 114
Width = 658
Height = 422
Caption = ‘摄像头操作‘
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = ‘MS Sans Serif‘
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object Button1: TButton
Left = 536
Top = 8
Width = 97
Height = 41
Caption = ‘激活摄像头‘
TabOrder = 0
OnClick = Button1Click
end
object Panel1: TPanel
Left = 0
Top = 0
Width = 521
Height = 385
Caption = ‘摄像头尚未激活中‘
TabOrder = 1
object MediaPlayer1: TMediaPlayer
Left = 200
Top = 16
Width = 253
Height = 33
TabOrder = 0
end
end
object Button2: TButton
Left = 536
Top = 56
Width = 97
Height = 41
Caption = ‘关闭摄像头‘
TabOrder = 2
OnClick = Button2Click
end
object Button3: TButton
Left = 536
Top = 112
Width = 97
Height = 41
Caption = ‘保存为BMP图片‘
TabOrder = 3
OnClick = Button3Click
end
object Button4: TButton
Left = 536
Top = 160
Width = 97
Height = 41
Caption = ‘开始录像‘
TabOrder = 4
OnClick = Button4Click
end
object Button5: TButton
Left = 536
Top = 208
Width = 97
Height = 41
Caption = ‘停止录像‘
TabOrder = 5
OnClick = Button5Click
end
object Button6: TButton
Left = 536
Top = 320
Width = 97
Height = 41
Caption = ‘退出‘
TabOrder = 6
OnClick = Button6Click
end
object Button7: TButton
Left = 536
Top = 256
Width = 97
Height = 49
Caption = ‘加载视频‘
TabOrder = 7
OnClick = Button7Click
end
object OpenDialog1: TOpenDialog
Left = 464
Top = 24
end
end