如何利用Flash控件捕获到swf文件的每一帧数据?

如何利用Flash控件捕获到swf文件的每一帧数据?

最近工作因为需要将swf转换成视频,开始想要从swf文件格式着手,解析出swf里面的图像,了解过swf文件格式后,发现是个复杂的工作,因此放弃这个方法,准备从截取flash控件图像着手。直接用flash控件创建窗口,然后通过窗口的设备dc来获取到flash的图像数据,但是遇到了一个问题,当我要隐藏flash控件窗口后,再也无法获取到图像。郁闷了一段时间。继续查询资料,终于找到了一种解决的办法,以下是解决的代码。

Shockwaveflash.h文件是从网上找到的flash控件提供的接口文件;

Flash.hFlash.cpp是利用atl来处理flash帧的实现文件,如果需要可以扩展其功能,这里就不详细列出。

 

//Shockwaveflash.h

#pragma  once

/* verify that the <rpcndr.h> version is high enough to compile this file*/

#ifndef __REQUIRED_RPCNDR_H_VERSION__

#define __REQUIRED_RPCNDR_H_VERSION__ 440

#endif

 

#include <ObjBase.h>

#include <Rpc.h>

#include <RpcNdr.h>

 

#ifndef __h_h__

#define __h_h__

 

#ifdef __cplusplus

extern "C"{

#endif

 

 

#ifndef __IShockwaveFlash_FWD_DEFINED__

#define __IShockwaveFlash_FWD_DEFINED__

    typedef interface IShockwaveFlash IShockwaveFlash;

#endif    

 

#ifndef __DShockwaveFlashEvents_FWD_DEFINED__

#define __DShockwaveFlashEvents_FWD_DEFINED__

    typedef interface DShockwaveFlashEvents DShockwaveFlashEvents;

#endif    

 

#ifndef __ShockwaveFlash_FWD_DEFINED__

#define __ShockwaveFlash_FWD_DEFINED__

 

#ifdef __cplusplus

    typedef class ShockwaveFlash ShockwaveFlash;

#else

    typedef struct ShockwaveFlash ShockwaveFlash;

#endif

 

#endif    

 

 

#ifndef __FlashProp_FWD_DEFINED__

#define __FlashProp_FWD_DEFINED__

 

#ifdef __cplusplus

    typedef class FlashProp FlashProp;

#else

    typedef struct FlashProp FlashProp;

#endif

 

#endif    

 

    void __RPC_FAR * __RPC_USER MIDL_user_allocate(size_t);

    void __RPC_USER MIDL_user_free( void __RPC_FAR * );

 

 

#ifndef __ShockwaveFlashObjects_LIBRARY_DEFINED__

#define __ShockwaveFlashObjects_LIBRARY_DEFINED__

 

 

 

EXTERN_C const IID LIBID_ShockwaveFlashObjects;

 

#ifndef __IShockwaveFlash_INTERFACE_DEFINED__

#define __IShockwaveFlash_INTERFACE_DEFINED__

 

 

EXTERN_C const IID IID_IShockwaveFlash ;

 

#if defined(__cplusplus) && !defined(CINTERFACE)

 

MIDL_INTERFACE("D27CDB6C-AE6D-11CF-96B8-444553540000")

IShockwaveFlash : public IDispatch

    {

    public:

       virtual /* [propget][id] */ HRESULT STDMETHODCALLTYPE get_ReadyState(

           /* [retval][out] */ long __RPC_FAR *thestate) = 0;

 

       virtual /* [propget][id] */ HRESULT STDMETHODCALLTYPE get_TotalFrames(

           /* [retval][out] */ long __RPC_FAR *numframes) = 0;

 

       virtual /* [propget][id] */ HRESULT STDMETHODCALLTYPE get_Playing(

           /* [retval][out] */ VARIANT_BOOL __RPC_FAR *Playing) = 0;

 

       virtual /* [propput][id] */ HRESULT STDMETHODCALLTYPE put_Playing(

           /* [in] */ VARIANT_BOOL Playing) = 0;

 

       virtual /* [propget][id] */ HRESULT STDMETHODCALLTYPE get_Quality(

           /* [retval][out] */ int __RPC_FAR *Quality) = 0;

 

       virtual /* [propput][id] */ HRESULT STDMETHODCALLTYPE put_Quality(

           /* [in] */ int Quality) = 0;

 

       virtual /* [propget][id] */ HRESULT STDMETHODCALLTYPE get_ScaleMode(

           /* [retval][out] */ int __RPC_FAR *scale) = 0;

 

       virtual /* [propput][id] */ HRESULT STDMETHODCALLTYPE put_ScaleMode(

           /* [in] */ int scale) = 0;

 

       virtual /* [propget][id] */ HRESULT STDMETHODCALLTYPE get_AlignMode(

           /* [retval][out] */ int __RPC_FAR *align) = 0;

 

       virtual /* [propput][id] */ HRESULT STDMETHODCALLTYPE put_AlignMode(

           /* [in] */ int align) = 0;

 

       virtual /* [propget][id] */ HRESULT STDMETHODCALLTYPE get_BackgroundColor(

           /* [retval][out] */ long __RPC_FAR *color) = 0;

 

       virtual /* [propput][id] */ HRESULT STDMETHODCALLTYPE put_BackgroundColor(

           /* [in] */ long color) = 0;

 

       virtual /* [propget][id] */ HRESULT STDMETHODCALLTYPE get_Loop(

           /* [retval][out] */ VARIANT_BOOL __RPC_FAR *Loop) = 0;

 

       virtual /* [propput][id] */ HRESULT STDMETHODCALLTYPE put_Loop(

           /* [in] */ VARIANT_BOOL Loop) = 0;

 

       virtual /* [propget][id] */ HRESULT STDMETHODCALLTYPE get_Movie(

           /* [retval][out] */ BSTR __RPC_FAR *path) = 0;

 

       virtual /* [propput][id] */ HRESULT STDMETHODCALLTYPE put_Movie(

           /* [in] */ BSTR path) = 0;

 

       virtual /* [propget][id] */ HRESULT STDMETHODCALLTYPE get_FrameNum(

           /* [retval][out] */ long __RPC_FAR *FrameNum) = 0;

 

       virtual /* [propput][id] */ HRESULT STDMETHODCALLTYPE put_FrameNum(

           /* [in] */ long FrameNum) = 0;

 

       virtual /* [id] */ HRESULT STDMETHODCALLTYPE SetZoomRect(

           /* [in] */ long left,

           /* [in] */ long top,

           /* [in] */ long right,

           /* [in] */ long bottom) = 0;

 

       virtual /* [id] */ HRESULT STDMETHODCALLTYPE Zoom(

           /* [in] */ int factor) = 0;

 

       virtual /* [id] */ HRESULT STDMETHODCALLTYPE Pan(

           /* [in] */ long x,

           /* [in] */ long y,

           /* [in] */ int mode) = 0;

 

       virtual /* [id] */ HRESULT STDMETHODCALLTYPE Play( void) = 0;

 

       virtual /* [id] */ HRESULT STDMETHODCALLTYPE Stop( void) = 0;

 

       virtual /* [id] */ HRESULT STDMETHODCALLTYPE Back( void) = 0;

 

       virtual /* [id] */ HRESULT STDMETHODCALLTYPE Forward( void) = 0;

 

       virtual /* [id] */ HRESULT STDMETHODCALLTYPE Rewind( void) = 0;

 

       virtual /* [id] */ HRESULT STDMETHODCALLTYPE StopPlay( void) = 0;

 

       virtual /* [id] */ HRESULT STDMETHODCALLTYPE GotoFrame(

           /* [in] */ long FrameNum) = 0;

 

       virtual /* [id] */ HRESULT STDMETHODCALLTYPE CurrentFrame(

           /* [retval][out] */ long __RPC_FAR *FrameNum) = 0;

 

       virtual /* [id] */ HRESULT STDMETHODCALLTYPE IsPlaying(

           /* [retval][out] */ VARIANT_BOOL __RPC_FAR *Playing) = 0;

 

       virtual /* [id] */ HRESULT STDMETHODCALLTYPE PercentLoaded(

           /* [retval][out] */ long __RPC_FAR *__MIDL_0015) = 0;

 

       virtual /* [id] */ HRESULT STDMETHODCALLTYPE FrameLoaded(

           /* [in] */ long FrameNum,

           /* [retval][out] */ VARIANT_BOOL __RPC_FAR *loaded) = 0;

 

       virtual /* [id] */ HRESULT STDMETHODCALLTYPE FlashVersion(

           /* [retval][out] */ long __RPC_FAR *version) = 0;

 

       virtual /* [propget][id] */ HRESULT STDMETHODCALLTYPE get_WMode(

           /* [retval][out] */ BSTR __RPC_FAR *pVal) = 0;

 

       virtual /* [propput][id] */ HRESULT STDMETHODCALLTYPE put_WMode(

           /* [in] */ BSTR pVal) = 0;

 

       virtual /* [propget][id] */ HRESULT STDMETHODCALLTYPE get_SAlign(

           /* [retval][out] */ BSTR __RPC_FAR *pVal) = 0;

 

       virtual /* [propput][id] */ HRESULT STDMETHODCALLTYPE put_SAlign(

           /* [in] */ BSTR pVal) = 0;

 

       virtual /* [propget][id] */ HRESULT STDMETHODCALLTYPE get_Menu(

           /* [retval][out] */ VARIANT_BOOL __RPC_FAR *pVal) = 0;

 

       virtual /* [propput][id] */ HRESULT STDMETHODCALLTYPE put_Menu(

           /* [in] */ VARIANT_BOOL pVal) = 0;

 

       virtual /* [propget][id] */ HRESULT STDMETHODCALLTYPE get_Base(

           /* [retval][out] */ BSTR __RPC_FAR *pVal) = 0;

 

       virtual /* [propput][id] */ HRESULT STDMETHODCALLTYPE put_Base(

           /* [in] */ BSTR pVal) = 0;

 

       virtual /* [propget][id] */ HRESULT STDMETHODCALLTYPE get_scale(

           /* [retval][out] */ BSTR __RPC_FAR *pVal) = 0;

 

       virtual /* [propput][id] */ HRESULT STDMETHODCALLTYPE put_scale(

           /* [in] */ BSTR pVal) = 0;

 

       virtual /* [propget][id] */ HRESULT STDMETHODCALLTYPE get_DeviceFont(

           /* [retval][out] */ VARIANT_BOOL __RPC_FAR *pVal) = 0;

 

       virtual /* [propput][id] */ HRESULT STDMETHODCALLTYPE put_DeviceFont(

           /* [in] */ VARIANT_BOOL pVal) = 0;

 

       virtual /* [propget][id] */ HRESULT STDMETHODCALLTYPE get_EmbedMovie(

           /* [retval][out] */ VARIANT_BOOL __RPC_FAR *pVal) = 0;

 

       virtual /* [propput][id] */ HRESULT STDMETHODCALLTYPE put_EmbedMovie(

           /* [in] */ VARIANT_BOOL pVal) = 0;

 

       virtual /* [propget][id] */ HRESULT STDMETHODCALLTYPE get_BGColor(

           /* [retval][out] */ BSTR __RPC_FAR *pVal) = 0;

 

       virtual /* [propput][id] */ HRESULT STDMETHODCALLTYPE put_BGColor(

           /* [in] */ BSTR pVal) = 0;

 

       virtual /* [propget][id] */ HRESULT STDMETHODCALLTYPE get_Quality2(

           /* [retval][out] */ BSTR __RPC_FAR *pVal) = 0;

 

       virtual /* [propput][id] */ HRESULT STDMETHODCALLTYPE put_Quality2(

           /* [in] */ BSTR pVal) = 0;

 

       virtual /* [id] */ HRESULT STDMETHODCALLTYPE LoadMovie(

           /* [in] */ int layer,

           /* [in] */ BSTR url) = 0;

 

       virtual /* [id] */ HRESULT STDMETHODCALLTYPE TGotoFrame(

           /* [in] */ BSTR target,

           /* [in] */ long FrameNum) = 0;

 

       virtual /* [id] */ HRESULT STDMETHODCALLTYPE TGotoLabel(

           /* [in] */ BSTR target,

           /* [in] */ BSTR label) = 0;

 

       virtual /* [id] */ HRESULT STDMETHODCALLTYPE TCurrentFrame(

           /* [in] */ BSTR target,

           /* [retval][out] */ long __RPC_FAR *FrameNum) = 0;

 

       virtual /* [id] */ HRESULT STDMETHODCALLTYPE TCurrentLabel(

           /* [in] */ BSTR target,

           /* [retval][out] */ BSTR __RPC_FAR *pVal) = 0;

 

       virtual /* [id] */ HRESULT STDMETHODCALLTYPE TPlay(

           /* [in] */ BSTR target) = 0;

 

       virtual /* [id] */ HRESULT STDMETHODCALLTYPE TStopPlay(

           /* [in] */ BSTR target) = 0;

 

       virtual /* [id] */ HRESULT STDMETHODCALLTYPE SetVariable(

           /* [in] */ BSTR name,

           /* [in] */ BSTR value) = 0;

 

       virtual /* [id] */ HRESULT STDMETHODCALLTYPE GetVariable(

           /* [in] */ BSTR name,

           /* [retval][out] */ BSTR __RPC_FAR *pVal) = 0;

 

       virtual /* [id] */ HRESULT STDMETHODCALLTYPE TSetProperty(

           /* [in] */ BSTR target,

           /* [in] */ int property,

           /* [in] */ BSTR value) = 0;

 

       virtual /* [id] */ HRESULT STDMETHODCALLTYPE TGetProperty(

           /* [in] */ BSTR target,

           /* [in] */ int property,

           /* [retval][out] */ BSTR __RPC_FAR *pVal) = 0;

 

       virtual /* [id] */ HRESULT STDMETHODCALLTYPE TCallFrame(

           /* [in] */ BSTR target,

           /* [in] */ int FrameNum) = 0;

 

       virtual /* [id] */ HRESULT STDMETHODCALLTYPE TCallLabel(

           /* [in] */ BSTR target,

           /* [in] */ BSTR label) = 0;

 

       virtual /* [id] */ HRESULT STDMETHODCALLTYPE TSetPropertyNum(

           /* [in] */ BSTR target,

           /* [in] */ int property,

           /* [in] */ double value) = 0;

 

       virtual /* [id] */ HRESULT STDMETHODCALLTYPE TGetPropertyNum(

           /* [in] */ BSTR target,

           /* [in] */ int property,

           /* [retval][out] */ double __RPC_FAR *pVal) = 0;

 

       virtual /* [propget][id] */ HRESULT STDMETHODCALLTYPE get_SWRemote(

           /* [retval][out] */ BSTR __RPC_FAR *pVal) = 0;

 

       virtual /* [propput][id] */ HRESULT STDMETHODCALLTYPE put_SWRemote(

           /* [in] */ BSTR pVal) = 0;

 

    };

 

#else /* C style interface */

 

    typedef struct IShockwaveFlashVtbl

    {

       BEGIN_INTERFACE

 

           HRESULT ( STDMETHODCALLTYPE __RPC_FAR *QueryInterface )(

           IShockwaveFlash __RPC_FAR * This,

           /* [in] */ REFIID riid,

           /* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppvObject);

 

           ULONG ( STDMETHODCALLTYPE __RPC_FAR *AddRef )(

              IShockwaveFlash __RPC_FAR * This);

 

           ULONG ( STDMETHODCALLTYPE __RPC_FAR *Release )(

              IShockwaveFlash __RPC_FAR * This);

 

           HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfoCount )(

              IShockwaveFlash __RPC_FAR * This,

              /* [out] */ UINT __RPC_FAR *pctinfo);

 

           HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfo )(

              IShockwaveFlash __RPC_FAR * This,

              /* [in] */ UINT iTInfo,

              /* [in] */ LCID lcid,

              /* [out] */ ITypeInfo __RPC_FAR *__RPC_FAR *ppTInfo);

 

           HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetIDsOfNames )(

              IShockwaveFlash __RPC_FAR * This,

              /* [in] */ REFIID riid,

              /* [size_is][in] */ LPOLESTR __RPC_FAR *rgszNames,

              /* [in] */ UINT cNames,

              /* [in] */ LCID lcid,

              /* [size_is][out] */ DISPID __RPC_FAR *rgDispId);

 

           /* [local] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Invoke )(

              IShockwaveFlash __RPC_FAR * This,

              /* [in] */ DISPID dispIdMember,

              /* [in] */ REFIID riid,

              /* [in] */ LCID lcid,

              /* [in] */ WORD wFlags,

              /* [out][in] */ DISPPARAMS __RPC_FAR *pDispParams,

              /* [out] */ VARIANT __RPC_FAR *pVarResult,

              /* [out] */ EXCEPINFO __RPC_FAR *pExcepInfo,

              /* [out] */ UINT __RPC_FAR *puArgErr);

 

           /* [propget][id] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_ReadyState )(

              IShockwaveFlash __RPC_FAR * This,

              /* [retval][out] */ long __RPC_FAR *thestate);

 

           /* [propget][id] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_TotalFrames )(

              IShockwaveFlash __RPC_FAR * This,

              /* [retval][out] */ long __RPC_FAR *numframes);

 

           /* [propget][id] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Playing )(

              IShockwaveFlash __RPC_FAR * This,

              /* [retval][out] */ VARIANT_BOOL __RPC_FAR *Playing);

 

           /* [propput][id] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Playing )(

              IShockwaveFlash __RPC_FAR * This,

              /* [in] */ VARIANT_BOOL Playing);

 

           /* [propget][id] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Quality )(

              IShockwaveFlash __RPC_FAR * This,

              /* [retval][out] */ int __RPC_FAR *Quality);

 

           /* [propput][id] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Quality )(

              IShockwaveFlash __RPC_FAR * This,

              /* [in] */ int Quality);

 

           /* [propget][id] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_ScaleMode )(

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值