Delphi 控制摄像头操作

2020-12-23 17:32

阅读:438

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


评论


亲,登录后才可以留言!