标题:当播放×.asf媒体文件时出现黑屏,而一般屏幕截取却能?
只看楼主
criemych
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2005-6-5
 问题点数:0 回复次数:0 
当播放×.asf媒体文件时出现黑屏,而一般屏幕截取却能?

当我按下列程序要实现媒体播放时,视频截取出现的却是黑呼呼的一大片,想请教同行高手们给点提示。程序原文如下:

??首先,在窗体中放入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.Monochrome:=false; ??imgbitmap.canvas.copyrect(rect(0,0,200,200),form1.canvas,rect(10,10,210,210)); paintbox1.invalidate; imgbitmap.SaveToFile('d:\1234.bmp');?

??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.PixelFormat:=pf32bit;

??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.

搜索更多相关主题的帖子: asf 屏幕 文件 播放 
2005-06-05 18:05



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-20149-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.316330 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved