• 视频采集,存成avi


    视频采集,存成avi
    unit Unit1;

    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.

  • 相关阅读:
    项目实战15—企业级堡垒机 jumpserver
    ELK重难点总结和整体优化配置
    ELK 经典用法—企业自定义日志收集切割和mysql模块
    项目实战14—ELK 企业内部日志分析系统
    搭建内网映射服务
    超好用内网映射神器
    Linux官方源、镜像源汇总
    搭建企业级PPTP服务器
    Ansible的Inventory管理
    Ansible的快速入门
  • 原文地址:https://www.cnblogs.com/yzryc/p/6374432.html
Copyright © 2020-2023  润新知