微信公众号 
图码生活

每天发布有五花八门的文章,各种有趣的知识等,期待您的订阅与参与
电脑报 1992-2001 十年文章全集
电脑报 1992-2001 十年文章全集
包含从 1992 年 - 2001 年间,两万余篇期刊文章,查询最少输入两个字符
随便看看
读取中
读取中
标题用Delphi编写视频捕捉程序
栏目软件世界
作者Bold
发布2001年7期
  当我们在欣赏美妙的动画时,是不是希望能截取其中自己喜欢的一幅画面呢?虽然方法有多种,但对于我们编程爱好者来说,当然是想通过自己编写的程序来完成,我就用Delphi编写了这样一个程序,希望与大家分享。
  首先,要在窗体中放入TMediaPlayer组件、TMainMenu组件,TOpenDialog组件和TButton组件各一个,并调整好各组件位置。
  为了加载媒体文件,需要在主菜单上建立一个Open选项,当用户打开并加载一个新的文件时,调用事件处理器,它决定将在什么位置播放该视频文件,并启动媒体播放器组件。为了确定打开哪个文件,需要用到OpenDialog组件。当在OpenDialog组件中执行execute方法时,它显示标准的打开对话框,并返回一个布尔值,表示用户已经选择了“OK”还是“Cancel”。如用户选取了一个有效文件,那么设置MediaPlayer上的FileName属性,使其等于OpenDialog的FileName属性,代码如下:
  Mediaplayer.filename:=opendialog1.filename;
  接下来,通过调用Open方法来打开并启动媒体播放器:
  MediaPlayer1.open;
  准备运行视频剪辑的最后一步是指定在Form1上要运行的图形及画面应该显示的区域。这是必要的,因为这样才会知道在什么位置捕捉图像。代码如下:
  Mediaplayer1.display:=form1;
  Mediaplayer1.displayrect:=rect(10,10,200,200)
  然后将TButton组件的caption属性改为“Capture”,这个按钮用来获取当前画面,并将其拷贝到内存中的一个位图中。但是把位图存储到什么位置呢?我们可以在TForm类说明的Private添加位图。虽然主窗体中引用了这个位图,但加载窗体时,仍需要调用create方法和定位图的尺寸。类似地,在关闭窗体时,通过删除这个位图来完成清理工作。捕捉的图像的显示是这样来完成的:将PaintBox组件放置于窗体上,每当调用OnPaint事件时,使用这个窗体的OnPaint事件将位图拷贝到PaintBox中,代码如下:
  procedure TForm1.PaintBox1Paint(Sender: TObject);
  begin
  paintbox1.Canvas.copyrect(rect(0,0,200,200);imgbitmap.canvas,rect(0,0,200,200));  end
  整个程序的完整代码如下:
  unit capture1;
  interface
  uses
  Windows, Messages,SysUtils,Classes,Graphics,Controls,Forms, Dialogs,
  Menus, MPlayer, ExtCtrls, StdCtrls;
  type
  TForm1 = class(TForm)
  Button1:TButton;
  PaintBox1:TPaintBox;
  MediaPlayer1: TMediaPlayer;
  OpenDialog1: TOpenDialog;
  MainMenu1:TMainMenu;
  File1:TMenuItem;
  Open1:TMenuItem;
  N1:TMenuItem;
  procedure Open1Click(Sender: TObject);
  procedure Button1Click(Sender: TObject);
  procedure FormPain(Sender: TObject);  
  procedure FormCreate(Sender: TObject);
  procedure FormClose(Sender:TObject;var Action:TCloseAction);
  procedure PaintBox1Paint(Sender: TObject);
  procedure Exit1Click(Sender: TObject);
  private
  imgbitmap:tbitmap;
  {Private declarations}
  public
  {Private declarations} 
  end;
  var
  Form1:TForm1;
  implementation
  {$R *.DFM}
  procedure TForm1.Open1Click(Sender: TObject);
  begin
  if opendialog1.execute then
  begin
  mediaplayer1.filename:=opendialog1.filename;
  mediaplayer1.open;
  mediaplayer1.display:=form1;
  mediaplayer1.displayrect;=rect(10,10,200,200);
  end;
  end;
  procedure TForm1.Button1Click(Sender: TObject);
  begin
  imgbitmap.canvas.copyrect(rect(0,0,200,200),form1.canvas,rect(10,10,210,210));  paintbox1.invalidate;
  end;
  procedure TForm1.FormPaint(Sender: TObject);
  begin
  canvas.FrameRect(rect(8,8,212,212))  
  end;
  procedure TForm1.FormCreate(Sender: TObject);
  begin
  imgbitmap:=tbitmap.create;
  imgbitmap.height:=200;
  imgbitmap.width:=200;
  imgbitmap.canvas.rectangle(0,0,200,200)
  end;
  procedure TForm1.FormClose(Sender:TObject;var Action:TCloseAction);  
  begin
  imgbitmap.free;
  end;
  procedure TForm1.PaintBox1Paint(Sender: TObject);
  begin
  paintbox1.Canvas.copyrect(rect(0,0,200,200),imgbitmap.canvas,rect(0,0,200,200));  end;
  end.