main.pas
上传用户:hylc_2004
上传日期:2014-01-23
资源大小:46800k
文件大小:3k
源码类别:

Delphi控件源码

开发平台:

Delphi

  1. unit main;
  2. interface
  3. uses
  4.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  5.   Dialogs, DSUtil, StdCtrls, DSPack, DirectShow9, Menus, ExtCtrls;
  6. type
  7.   TVideoForm = class(TForm)
  8.     FilterGraph: TFilterGraph;
  9.     VideoWindow: TVideoWindow;
  10.     MainMenu1: TMainMenu;
  11.     Devices: TMenuItem;
  12.     Filter: TFilter;
  13.     Blend1: TMenuItem;
  14.     ext1: TMenuItem;
  15.     Bitmap1: TMenuItem;
  16.     OpenDialog: TOpenDialog;
  17.     procedure FormCreate(Sender: TObject);
  18.     procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  19.     procedure FormDestroy(Sender: TObject);
  20.     procedure ext1Click(Sender: TObject);
  21.     procedure Bitmap1Click(Sender: TObject);
  22.   private
  23.     { D閏larations priv閑s }
  24.   public
  25.     { D閏larations publiques }
  26.     VMRBitmap: TVMRBitmap;
  27.     procedure OnSelectDevice(sender: TObject);
  28.   end;
  29. var
  30.   VideoForm: TVideoForm;
  31.   SysDev: TSysDevEnum;
  32. implementation
  33. uses Math;
  34. {$R *.dfm}
  35. procedure TVideoForm.FormCreate(Sender: TObject);
  36. var
  37.   i: integer;
  38.   Device: TMenuItem;
  39. begin
  40.   SysDev:= TSysDevEnum.Create(CLSID_VideoInputDeviceCategory);
  41.   if SysDev.CountFilters > 0 then
  42.     for i := 0 to SysDev.CountFilters - 1 do
  43.     begin
  44.       Device := TMenuItem.Create(Devices);
  45.       Device.Caption := SysDev.Filters[i].FriendlyName;
  46.       Device.Tag := i;
  47.       Device.OnClick := OnSelectDevice;
  48.       Devices.Add(Device);
  49.     end;
  50.   VMRBitmap:= TVMRBitmap.Create(VideoWindow);
  51. end;
  52. procedure TVideoForm.OnSelectDevice(sender: TObject);
  53. begin
  54.   FilterGraph.ClearGraph;
  55.   FilterGraph.Active := false;
  56.   Filter.BaseFilter.Moniker := SysDev.GetMoniker(TMenuItem(Sender).tag);
  57.   FilterGraph.Active := true;
  58.   with FilterGraph as ICaptureGraphBuilder2 do
  59.     CheckDSError(RenderStream(@PIN_CATEGORY_PREVIEW , nil, Filter as IBaseFilter, nil, VideoWindow as IbaseFilter));
  60.   FilterGraph.Play;
  61. end;
  62. procedure TVideoForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  63. begin
  64.   SysDev.Free;
  65.   FilterGraph.ClearGraph;
  66.   FilterGraph.Active := false;
  67. end;
  68. procedure TVideoForm.FormDestroy(Sender: TObject);
  69. begin
  70.   VMRBitmap.Free;
  71. end;
  72. procedure TVideoForm.ext1Click(Sender: TObject);
  73. begin
  74.   with VMRBitmap, Canvas do
  75.   begin
  76.     LoadEmptyBitmap(300,200,pf24bit, clSilver);
  77.     Source := VMRBitmap.Canvas.ClipRect;
  78.     Options := VMRBitmap.Options + [vmrbSrcColorKey];
  79.     ColorKey := clSilver;
  80.     Brush.Color := clSilver;
  81.     Font.Color := clWhite;
  82.     Font.Style := [fsBold];
  83.     Font.Size := 30;
  84.     Font.Name := 'Arial';
  85.     TextOut(0,0,'Hello Word :)');
  86.     DrawTo(0,0,1,1,0.5);
  87.   end;
  88. end;
  89. procedure TVideoForm.Bitmap1Click(Sender: TObject);
  90. var Bitmap: TBitmap;
  91. begin
  92.   if OpenDialog.Execute then
  93.   Begin
  94.     Bitmap:= TBitmap.Create;
  95.     try
  96.       Bitmap.LoadFromFile(OpenDialog.FileName);
  97.       VMRBitmap.LoadBitmap(Bitmap);
  98.       VMRBitmap.Source := VMRBitmap.Canvas.ClipRect;
  99.       VMRBitmap.DrawTo(0,0,0.5,0.5, 0.5);
  100.     finally
  101.       Bitmap.Free;
  102.     end;
  103.   end;
  104. end;
  105. end.