⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unit1.pas

📁 摄像头视频捕捉程序
💻 PAS
字号:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Menus, ExtCtrls, StdCtrls, ComCtrls, dspack, DSUtil, directshow, OleServer;

type
  TForm1 = class(TForm)
    VideoWindow: TDSVideoWindow;
    Memo1: TMemo;
    Splitter1: TSplitter;
    MainMenu1: TMainMenu;
    File1: TMenuItem;
    Open1: TMenuItem;
    OpenDialog: TOpenDialog;
    Exit1: TMenuItem;
    Control1: TMenuItem;
    Play1: TMenuItem;
    Pause1: TMenuItem;
    Stop1: TMenuItem;
    FilterGraph: TDSFilterGraph2;
    DSTrackBar1: TDSTrackBar;
    ListBox1: TListBox;
    Splitter2: TSplitter;
    procedure Open1Click(Sender: TObject);
    procedure Exit1Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Play1Click(Sender: TObject);
    procedure Pause1Click(Sender: TObject);
    procedure Stop1Click(Sender: TObject);
    procedure FilterGraphDSEvent(sender: TOleServer; Event, Param1,
      Param2: Integer);
    procedure FormShow(Sender: TObject);
    procedure ListBox1DblClick(Sender: TObject);
  private
    { D閏larations priv閑s }
  public
    { D閏larations publiques }
    procedure GetFilterList(graph: IFilterGraph; list: TStrings);
  end;

var
  Form1: TForm1;
implementation

{$R *.DFM}

procedure TForm1.Open1Click(Sender: TObject);
begin
  if OpenDialog.Execute then
  begin
    FilterGraph.ClearGraph;
    memo1.Clear;
    FilterGraph.FilterGraph2.RenderFile(StringToOleStr(OpenDialog.FileName),nil);
    GetFilterList(FilterGraph.FilterGraph2,listbox1.Items);
    FilterGraph.QueryInterfaces;
    FilterGraph.MediaControl.Run;
  end;
end;

procedure TForm1.Exit1Click(Sender: TObject);
begin
  FilterGraph.Disconnect;
  Application.Terminate;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  FilterGraph.Disconnect;
end;

procedure TForm1.Play1Click(Sender: TObject);
begin
  if assigned(FilterGraph.MediaControl) then FilterGraph.MediaControl.Run;
end;

procedure TForm1.Pause1Click(Sender: TObject);
begin
  if assigned(FilterGraph.MediaControl) then FilterGraph.MediaControl.Pause;
end;

procedure TForm1.Stop1Click(Sender: TObject);
begin
  if assigned(FilterGraph.MediaControl) then FilterGraph.MediaControl.Stop;
end;

procedure TForm1.FilterGraphDSEvent(sender: TOleServer; Event, Param1,
  Param2: Integer);
begin
  memo1.Lines.Add(GetEventCodeDef(event));
end;

procedure TForm1.FormShow(Sender: TObject);
begin
  FilterGraph.Connect;
end;

procedure TForm1.GetFilterList(graph: IFilterGraph; list: TStrings);
var EnumFilters: IEnumFilters;
    BaseFilter: IBaseFilter;
    FilterInfo: TFilterInfo;
begin
  list.Clear;
  graph.EnumFilters(EnumFilters);
  While (EnumFilters.Next(1, BaseFilter, nil)=S_OK) do
  begin
    BaseFilter.QueryFilterInfo(FilterInfo);
    list.Add(FilterInfo.achName);
  end;
end;

procedure TForm1.ListBox1DblClick(Sender: TObject);
var BaseFilter: IBaseFilter;
begin
  if (listbox1.ItemIndex <> -1) then
  begin
    FilterGraph.FilterGraph2.FindFilterByName(StringToOleStr(listbox1.Items.Strings[listbox1.ItemIndex]), BaseFilter);
    ShowFilterPropertyPage(BaseFilter);
  end;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -