1000分重金求助!如何截取Flash一帧并保存为图片?我有思路!(300分)

  • 主题发起人 主题发起人 rejoise
  • 开始时间 开始时间
R

rejoise

Unregistered / Unconfirmed
GUEST, unregistred user!
由于最高分值只有300分,分数一会儿再加!
我想在一个DLL里截取一个Flash帧保存为图片,请高手指教!
我的思路 使用ShockwaveFlash控件,就是Macromedia带的

在dll里是我这样调用ShockwaveFlash控件的

uses里面添加了ShockwaveFlashObjects_TLB
代码如下:
var
Bmp:TBitmap;
ShockwaveFlash1: TShockwaveFlash; // 声明变量
begin
Bmp1:=TBitmap.create;
ShockwaveFlash1:=TShockwaveFlash.Create(nil); //初始化ShockwaveFlash控件
Bmp1.Width:=ShockwaveFlash1.width;
Bmp1.Height:=ShockwaveFlash1.Height;
ShockwaveFlash1.PaintTo(Bmp1.Canvas.Handle,0,0); //这儿好象在dll里有问题
Bmp1.SaveToFile('c:/temp.bmp');
end;

以上语句如果编译成可执行程序则能运行,但编译成dll,调用时会出现错误
Could not obtain OLE control window handle

我怀疑是paintTo出了问题,请教高手这是为什么,是我调用错误吗?有什么解决方法?
或者不用ShockwaveFlash那就更好了!
倾囊相赠!
 
引用 ActiveX 单元 ,加入这句下面两句试试。。。

CoInitialize(nil); // 加上这一对试试呢。
ShockwaveFlash1:=TShockwaveFlash.Create(nil); //初始化ShockwaveFlash控件
Bmp1.Width:=ShockwaveFlash1.width;
Bmp1.Height:=ShockwaveFlash1.Height;
ShockwaveFlash1.PaintTo(Bmp1.Canvas.Handle,0,0); //这儿好象在dll里有问题
Bmp1.SaveToFile('c:/temp.bmp');
CoUninitialize; //
 
to darnis;
我加了这一对语句,还是出现那样的错误
大虾再想办法帮帮我吧,谢谢!
 
非在软件中进行吗?
如果不是,
使用抓图软件也是一个好办法!

我的很多图片就是这样得来的!
 
initialization
   OleInitialize(nil);
  finalization
   try
    OleUninitialize;
   except
   end;
加入一个UNIT单元,然后再加入试试.
 
没有效果啊,有没有更好的方法?大虾继续
 
var
Bmp1:TBitmap;
ShockwaveFlash2: TShockwaveFlash; // 声明变量
begin
Bmp1:=TBitmap.create;
ShockwaveFlash2:= TShockwaveFlash.CreateParented(Form1.Handle);
ShockwaveFlash2.LoadMovie(0,'c:/top.swf');
Bmp1.Width:=ShockwaveFlash2.width;
Bmp1.Height:=ShockwaveFlash2.Height;
ShockwaveFlash2.PaintTo(Bmp1.Canvas,0,0);
Bmp1.SaveToFile('c:/temp.bmp');
end;
 
不行啊,我是写的com组件,在asp中调用的,哪有什么handle啊!!!
 
var
Bmp1:TBitmap;
ShockwaveFlash2: TShockwaveFlash; // 声明变量
begin
Bmp1:=TBitmap.create;
ShockwaveFlash2:= TShockwaveFlash.CreateParented(GetDesktopWindow());
ShockwaveFlash2.LoadMovie(0,'c:/top.swf');
Bmp1.Width:=ShockwaveFlash2.width;
Bmp1.Height:=ShockwaveFlash2.Height;
ShockwaveFlash2.PaintTo(Bmp1.Canvas,0,0);
Bmp1.SaveToFile('c:/temp.bmp');
end;
 
大虾,这样虽然程序不出错,但在asp中调用这个DLL后,抓出来的图片是空白的,没辙呀!
大虾再好好想想,谢谢!
 
把你的程序再贴出来,肯定和我发的不一样。
 
好的,你把它编译成com组件试过吗?
编译成exe文件是可以抓到的
但是dll里包含了可视控件,用paintto能行吗?
 
你把工程发给我,我帮你看看。
 
xusong168@sina.com
 
ShockwaveFlash2:= TShockwaveFlash.CreateParented(GetDesktopWindow());
ShockwaveFlash2.PaintTo(Bmp1.Canvas,0,0);
这2句的修改是关键,注意第2句参数是Bmp1.Canvas,而不是Bmp1.Canvas.handle
 
我的工程很简单,就是为了实现抓图功能,我用你写的代码会出错
尤其是你说的
‘注意第2句参数是Bmp1.Canvas,而不是Bmp1.Canvas.handle’
如果用ShockwaveFlash2.PaintTo(Bmp1.Canvas,0,0);
则编译通不过,发生错误Incompatible types: 'HDC' and 'TCanvas'
所以以上方法行不通
 
procedure PaintTo(DC: HDC; X, Y: Integer); overload;
procedure PaintTo(Canvas: TCanvas; X, Y: Integer); overload;
这是2个不同的过程
 
两个过程名称一样啊???
反正编译出错了,你说怎么办?
 
To xusong168
两个函数名称一样,编译器该使用哪个paintTo呀?
好奇怪,出错了我没办法解决了,大虾,问题快要解决了,再加把劲!
 
后退
顶部