你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:技术专栏 / Linux开发
在多媒体文件中批量抓取图象(1)
 

---- 目前,随着计算机的逐渐普及,人们在VCD影碟、游戏光盘、甚至是学习软件中,都可以获得大量的多媒体文件。如何把其中的心爱片段剪辑下来,制作成BMP位图、AVI视频文件,或是压缩成JMEP动画图片,已经成为人们日益关心的问题。

---- 其实,用DELPHI只需要不多的几行程序就可以在多媒体文件中实现批量抓取图象的功能,而且,采样频率还可自由设定。至于如何将剪辑下来的位图制作成AVI或JPEG文件,相关的软件以及程序的制作介绍已经很多了,如Paint Shop Pro等,这里便不再多说。下面,就让我们DIY。

---- 首先,我们需要一个媒体播放器:System卡下的MediaPlayer控件(MdPlayer)。MediaPlayer控件可以播放有声或无声的AVI剪辑,CD唱盘等各种多媒体文件,如果用户安装了Microsoft 的 ActiveMovie的话,其还能播放MPEG格式的电影(.dat)。为了便于管理,我们需要一个Panel作为播放的画板(Panel1),并将MdPlayer的Display属性设为Panel1。Label1显示文件名、文件的总帧数以及起始位置, Label2显示当前位置。Edit1显示采样率,即,每隔几帧进行一次图象抓取,由一个UpDown控件(UpDown1)进行控制,min属性设为1、max属性设为10、Position属性设为1即,采样率为1—10帧/点,默认为1。TrackBar1控制文件的播放位置。SpeedButton1的Flat为True,GroupIndex为1,按下时准备采样,弹起时停止采样。Button1打开文件选取菜单。

---- 接着,我们需要编写程序。文件打开之后对MdPlayer执行Open方法,即可在Panel1上播放。当按下‘准备采样’按钮后,在MdPlayer的OnClick 事件中写下如下代码

if ((Button = btBack) or (Button = btStep))
and Fetchf then
//采样按钮是否按下,是否点击的是前进或后退按钮
(兰色按钮)
//如满足条件:
try
myBmp := TBitMap.Create ;
//创建位图对象
MyCanvas := TCanvas.Create ;
//创建画布对象
rect := mdPlayer.DisplayRect ;
//取边界
Dc := GetDc(Panel1.Handle);
//取得Panel1的设备环境
myCanvas.Handle := dc;
//赋给画布对象
myBmp.Width := rect.Right - rect.Left ;
myBmp.Height := rect.Bottom - rect.Top ;
//设定位图大小
myBmp.Canvas.CopyRect(rect,myCanvas,Rect);
//复制于位图对象上
. . . .
//将文件保存于特定路径
//释放所有句柄

详细程序如下:
var
Form1 : TForm1;
Fetchf : Boolean;
path : string;
Count : integer;

implementation

{$R *.DFM}

Procedure TForm1.UpdataTrackBar ;
begin
TrackBar.min := MdPlayer.StartPos;
TrackBar.max := MdPlayer.Length;
TrackBar.Position := MdPlayer.Position;
Label2.Caption := '当前位置: '
    +Inttostr(MdPlayer.Position);
end;

procedure TForm1.InitShow;
begin
with Mdplayer do begin
    Form1.Caption := FileName ;
    Path := ExtractFilePath(FileName)+'bmp';
Count := 0;
if FileName < > '' then begin
Open;
TrackBar.Enabled := True;
    UpdataTrackBar;
TrackBar.SetFocus ;
Frames := 1;
    label1.Caption :='文件名: ' +
FileName + #13#10 +' 总长度: '+ Inttostr(Length);
        label1.Caption :=Label1.Caption +
#13#10 +' 起始位置: '+ Inttostr(StartPos)
end else begin
    Label1.Caption :='';
Label2.Caption :='';
end;
end;
end

(编辑:aniston)

  推荐精品文章

·2024年12月目录 
·2024年11月目录 
·2024年10月目录 
·2024年9月目录 
·2024年8月目录 
·2024年7月目录 
·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089