Flash 透明播放

易语言FLASH透明窗口源码 易语言FLASH透明窗口源码 顾名思义! 立即下载
 

在网页中只需要加入以下代码

<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0" width="600" height="60"> 
<param name="movie" value="test.swf"> 
<param name="quality" value="high"> 
<param name="wmode" value="transparent"> 
<embed src="***.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="600" height="60"></embed> 
</object> 

就可以实现 Flash 背景透明

在VC中要实现 Flash 背影透明播放,Google了一下找到一个 Demo
原文URL:http://www.codeguru.com/cpp/g-m/multimedia/graphics/article.php/c12229/Transparent-Flash-Control-in-Plain-C.htm


需要自己实现一个OLE容器,以前很少接触COM,现在要实现的是一个OLE容器,先汗一下!!!!
想到一个问题:自己实现一个OLE容器跟使用直接使用FlashOcx 控件有何不同?
-- 未解决

Part 1
实现一个ActiveX对象的OLE容器需要继承几个接口
IOleClientSite
IOleInPlaceSiteWindowless
IOleInPlaceFrame
IStorage
(具体做什么,需要找资料恶补一下~~~~ ActiveX, OLE容器……)

在DEMO里实现了一个OLE容器类叫 COleContainerWnd

template<CLASS T>
class COleContainerWnd : virtual public IOleClientSite,
                         virtual public IOleInPlaceSiteWindowless, 
                         virtual public IOleInPlaceFrame,
                         virtual public IStorage

是个模板类,T是留给 ActiveX 的接口

Part 2
把 flash.ocx 引进来,因为里面包含了Flash播放器的相关接口定义,它就是我们要放到容器里的 ActiveX 对象了
#import "flash.ocx" named_guids 

Part 3
CFlashWnd派生类
class CFlashWnd: public COleContainerWnd<ShockwaveFlashObjects::IShockwaveFlash>,
                                 public ShockwaveFlashObjects::_IShockwaveFlashEvents,
                                 public ShockwaveFlashObjects::IServiceProvider
再汗一下,CFlashWnd 是个容器,还要实现 public ShockwaveFlashObjects::IServiceProvider 接口作甚?

至于要继承 ShockwaveFlashObjects::_IShockwaveFlashEvents 接口的目的是为了接收 Flash 动画发过来的 fscommand() 事件,在 Flash的AS(动作脚本)中调用 FsCommand(),就会
触发这个事件了
(这是一个精通 Flash 的同学告诉我的!!)

CFlashWnd 对象的创建
g_flashWnd = new CFlashWnd;
g_flashWnd->Create(ShockwaveFlashObjects::CLSID_ShockwaveFlash,
WS_EX_LAYERED, WS_POPUP | WS_VISIBLE | WS_CLIPSIBLINGS,
g_hWnd, g_hInst); 

Create() 函数的第一个参数:Flash 播放对象的ClassID
Create() 函数的第二个参数:窗体的扩展风格 WS_EX_LAYERED ,据说加了这个风格才能实现透明 Flash ,为啥?
……

Part 4
CFlashWnd::Create() 的内幕
注册了窗口类,然后就 CreateWindows  了

值得注意的是

OleCreate() 函数用来创建一个 IOleObject 对象的实例,需要 把 Ole 容器 的 IOleClientSite 和 IStorage 作为参数传给它
    hr = OleCreate(m_CLSID, IID_IOleObject, OLERENDER_DRAW,
        0, (IOleClientSite *)this, (IStorage *)this, (void **)&m_lpO);

不解的是,virtual public IOleInPlaceSiteWindowless 跟 virtual public IOleInPlaceFrame 不用理了?

    hr  =  OleSetContainedObject(m_lpO, TRUE);

OleSetContainedObject () 函数通知 IOleObject 对象跟它说,你已经被嵌到 OLE 容器里了

hr  =  m_lpO -> QueryInterface(__uuidof(T), ( void   ** ) & m_lpControl);
然后用 IOleObject 的 QueryInterface 获取 IShockwaveFlash 接口(那个 T, 就是 ShockwaveFlashObjects::IShockwaveFlash 了)

    hr  =  m_lpO -> QueryInterface(IID_IViewObjectEx, ( void   ** ) & m_lpViewObjectEx);
同样的方法,也得到了 IViewObjectEx  的接口
IViewObjectEx 用来干嘛的??

要创建一个无窗口的控件,OLE容器需要  IOleInPlaceObjectWindowless 接口来分派消息给对象, 因为 对象本身没有自己所属的窗体
另外,IOleInPlaceObject 接口需要重出那个对象

hr  =  m_lpO -> DoVerb(OLEIVERB_SHOW, NULL, (IOleClientSite  * ) this ,  0 , NULL, NULL);
IOleObject::DoVerb() 用来显示对象和将对象置为运行的状态

这样,Flash 播放对象就建好了.....

Part 5.
透明窗体的重画

1、创建窗体时加上 WS_EX_LAYERED 属性
2、用 CreateDIBSection() 创建一个 32位的DIB块, 然后把它 Select 到 DC 里面, It will be an offscreen plain to render window contents to. (这句不知如何译....)
3、描绘窗体的内容, preserving the alpha channel. (同上..)
4、调用 UpdateLayeredWindow() 函数重画窗体

描绘 Flash 播放的内容,用 OleDraw() 函数, 在 IViewObject::Draw()  中调用
hr  =  OleDraw(lpV, DVASPECT_TRANSPARENT, hdcDraw,  & rTotal); 

lpV – IViewObject 
interface  of flash player control 
hdcDraw – offscreen plain 
rTotal – client rectangle of the container window 

DVASPECT_TRANSPARENT drawing aspect tells the object to draw it's content using alpha blending.

DVASPECT_TRANSPARENT drawing aspect tells the object to draw it's content using alpha blending.

While implementing this, I have met a serious bug in Flash Player Control 8. This bug is only in this version. Players 7 and 9 are free of it. The bug is in the way Flash Control fills the alpha channel of a 32 bit device context. If at least 1 of 255 alpha values is applied to pixel, the colors are mixed correctly, but the resulting alpha channel is set to 255, even if it was initially zero. This makes it impossible to create semitransparent windows. So I had to develop a solution to fix this bug. The solution is quite simple:

These equations are used by Flash Player Control for alpha blending:

R' = Rdst * (1 – alpha) + Rsrc * alpha
G' = Gdst * (1 – alpha) + Gsrc * alpha
B' = Bdst * (1 – alpha) + Bsrc * alpha

If I draw the contents of Flash onto black surface I get

R'black = Rsrc * alpha
G'black = Gsrc * alpha
B'black = Bsrc * alpha

If I draw the contents of Flash onto white surface I get

R'white = 255 * (1 – alpha) + Rsrc * alpha
G'white = 255 * (1 – alpha) + Rsrc * alpha
B'white = 255 * (1 – alpha) + Rsrc * alpha

Here is the system of equations:

R'black = Rsrc * alpha
R'white = 255 * (1 – alpha) + Rsrc * alpha

where alpha and Rsrc are unknown. After solving it you will get:

(255-Alpha) = R'white – R'black

Alpha = 255 – (R'white – R'black)

So, the solution is found. Now, we can draw contents of flash player twice and then correct the corrupted alpha channel.

Part 6. Events
Flash Player 对象的事件是用IDispatch来处理的,在创建后得到一个 IConnectionPointContainer 去获取 DIID__IShockwaveFlashEvents 的 连接点(connection point)
hr  =  m_lpControl -> QueryInterface(IID_IConnectionPointContainer,
(
void ** ) & m_lpConCont);
if  (FAILED(hr))
return  FALSE;
hr 
=  m_lpConCont -> FindConnectionPoint(
ShockwaveFlashObjects::DIID__IShockwaveFlashEvents, 
& m_lpConPoint);
if  (FAILED(hr))
return  FALSE;
hr 
=  m_lpConPoint -> Advise(
(ShockwaveFlashObjects::_IShockwaveFlashEvents
* ) this ,
& m_dwConPointID);
if  (FAILED(hr))
return  FALSE;

Part 7. DirectDraw
为了提交重画的性能,所以使用 DirectDraw 接口
Flash对象通过 ShockwaveFlashObjects::IServiceProvider::raw_RemoteQueryService 这个接口来访问它
(需要找一下 FlashObject 接口的文档了解一下)


(眼睛睁不开,需要先睡一会………………)



无窗口播放透明flash 这是一个小程序,可以像QQ魔法秀一样用来播放透明的swf文件。特点: 1.能读取swf文件头部字节来判断flash影片的大小。。 2.实现了用zlib解压CWS类型的swf文件。 3.在桌面上显示有声音有动画的swf文件,效果非常炫。 4.用途:可以根据这个例子开发flash界面的动态UI,比如最近的搜狗flash皮肤就是用了这个技术。 写了很久,源代码不免费放出,想要的联系我。 立即下载

相关推荐

mfc+flash 透明背景,透明窗口,无锯齿

mfc+flash 透明背景,透明窗口,无锯齿。采用的OLE.

网狐6603编译某些子游戏的时候,出现fatal error LNK1179:错误

fatal error LNK1179: invalid or corrupt file: duplicate comdat “XXX” 解决方法,找到(ocx和dll都是类似的) \6603_VS2013\游戏组件\开发库\Include\ShareControlHead.h #import “Flash.ocx” named_guids 改为 #import “Flash.ocx” nam...

Anton8801的博客 490

flash动画透明效果

透明效果动画,flash应用,省去你一番功夫

通过IViewObject接口,取浏览器的图象,实现SNAP

通过IViewObject接口,取浏览器的图象,实现SNAP 今天又见到snap实现的文章,看来对此感兴趣的人挺多的.实现这个功能确实很'眩',我也来做一个把玩一下. 我的做法不是 Control.DrawToBitmap ,而是直接QueryInterface 浏览器Com对象的 IViewObject 接口,用它实现的Draw方法,画到图象上. ...

weixin_34221112的博客 255

Pytorch的一小步,昇腾芯片的一大步

相信在AI圈的人多多少少都看到了最近的信息:PyTorch最新2.1版本宣布支持华为昇腾芯片!

机器学习-深度学习-图像处理-opencv-段子 5239

MRST开源油藏模拟:从入门到精通的全流程指南

本文全面介绍了MRST开源油藏模拟工具的使用方法,从环境搭建到核心功能实战,再到性能优化和工业级应用。MRST作为一款基于MATLAB的开源工具,为油藏工程师提供了强大的数值模拟能力,特别适合教学和科研场景。文章还分享了二次开发技巧和常见问题解决方案,帮助读者快速掌握油藏模拟技术。

beer8的博客 326

在MFC中使用纯COM方式来操纵Flash OCX

1. MFC中的控件(OCX)包装类 在VC++环境中,使用OCX会变得比较简单和快捷。 在Dialog中插入ActiveX,如:Shockwave Flash Object。 在建立了Dialog的类之后,为刚才插入的Flash 控件添加变量, MFC会自动帮我们生成两个文件:CShockwaveFlash1.h和CShockwaveFlash1.cpp有了这两个文件,就可以...

weixin_30535167的博客 294

Ubuntu配置Qt Creator树莓派交叉编译环境一步到位

本文详细指导在Ubuntu系统上配置Qt Creator树莓派交叉编译环境。从工具链安装、sysroot创建到Qt库编译,逐步讲解如何搭建完整的ARMv7交叉编译工具链,实现高效开发树莓派应用。

1273

C++builder ShockwaveFlash 利用窗体透明属性 实现 播放flash 透明背景

最近在做一个项目中遇到的问题,如何实现 播放背景透明的flash,参考了妖哥论坛上的帖子《模仿QQ魔法表情》[url=http://www.ccrun.com/view.asp?id=22][/url],就是截图作为html背景 用CppWebBrowser 显示 加载了flash的html,但是存在问题,如果背景发生了变化,就演砸了。。。     我的解决方法就是 利用Form的AlphaBl

1509

【Qt实战项目】记事本完整项目

效果图如下所示: 全部代码如下: #include “notepad.h” #include int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow w; w.showMaximized(); return a.exec(); }

YIZHILIUSHA2020的博客 575

《Python星球日记》 第72天:问答系统与信息检索

《Python星球日记》 第72天:问答系统与信息检索,在前面的日子里,我们学习了自然语言处理的基础知识,包括文本预处理、词向量、Transformer架构和各种预训练模型。今天,我们将探索问答系统这一NLP的重要应用,以及如何结合信息检索技术构建智能问答系统。

Code_流苏:在代码中寻诗意,在实践中觅真知 1072

在flash控件中设置使用透明背景播放影片

网页或者在window form中插入flash影片形成动态效果是很常用的动态效果显示方式,但是如果网页或者form是分层显示的结构,怎样才能发flash的背景呢?今天CG解决一个小问题,关于控制flash影片在容器中播放时的背景透明显示问题,相信大家在做网页或者做winform的时候肯定遇到过,大家不需要刻意去修改flash影片的背景为透明因为设置透明的话在flash控件中显示效果是一样的,这里

李大仁博客 2721

Python与CAD系列基础篇(二)创建点和直线并修改样式

①通过pyautocad连接AutoCAD进行处理②通过ezdxf处理dxf格式文件。创建和编辑点和直线的方法,并演示如何修改它们的样式、颜色和线型。

weixin_43894929的博客 3036

java改变窗口形状,用java窗口播放flash,java窗口可设置透明度

【实例简介】其中test的几个类是播放flash的,只看flashTest01.java就行了!里面还有jflashplayer.jar(FlashPanle类可以实现播放flash),jan.zip,examples.jar(WindowUtils可以实现窗口透明和穿透、改变窗口形状)【实例截图】【核心代码】e413b1f7-7b1e-4de5-83e9-78a69c418747├── flas...

weixin_30865253的博客 205

华为OD机考双机位C卷 - 敌情监控 (Java & Python& JS & C/C++ & GO )

华为OD机考双机位C卷 - 敌情监控 (OD上机考试双机位C卷)。提供在线OJ刷题。Java、C++、Python、GO语言、C语言、JavaScript题解,并提供完整思路讲解。

算法大师! 964

【python爬虫--爬取电商商品及对其销量、好差评等数据进行分析】Python爬虫爬取电商商品及大数据分析-实战

选择目标电商网站:这里选择爬取两个不同电商网站(比如京东、淘宝)上的商品数据,包括商品名称、价格、销量和评价信息。编写爬虫:通过爬虫获取商品信息并保存数据。数据清洗与对齐:将两个电商网站抓取到的数据进行统一清洗和对齐。数据分析:进行销量分析、好评与差评分析等。

Dreams°的博客 4011

VC写的Flash动画播放组件 ,实现透明播放Flash动画及交互功能,类似迅雷及PPS广告动画

 Flash动画播放组件V1.01.支持Flash的.swf 格式动画文件;2.可自定义播放位置,动画尺寸;3.可设置是否拖动;4.支持与Flash的数据交互(发送和接收);5.动画效果流畅,类似迅雷的广告动画效果;6.以API接口方式提供,调用方便,支持MFC; 程序下载地址: 点击下载 采用vc2005 + com 技术编写;   支持同时播放多个动画:

xnwush 的网络小屋 1687

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Flash透明背景设置

&lt;OBJECT style="WIDTH: 538px" height="127" width="538" classid="clsid:D27CDB6E-AE6D-11CF-96B8-444553540000"&gt;&lt;PARAM NAME="_cx" VALUE="14235"&gt;&lt;PARAM NAME="_c

weixin_33716154的博客 419

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

解决 CHROME FLASH 不能自动播放的问题及加载视频前的“黑色背景”如何改变

chrome中flash不能自动播放,相信很多人都遇到了这个问题,网上检索的话,很多都会提到添加muted,当时尝试了这个方法,根本不起作用。后来慢慢发现一种情况:当单独在根节点中放入video后,可以自动播放,后来又发现宽度必须要大于一定值,否则还是不行,自己当时尝试到300(300也可以),250就不行了,如果在一个标签里或者一个盒子里嵌套了video,那么这个盒子的宽度也必须大于...

weixin_44268707的博客 1399

简单flash播放器代码

flash 播放

英雄汉孑的博客 1966

10种自动音乐播放器代码

1, 隐藏音乐自动播放代码:  2,Flash自动播放代码: 3,视频常用自动播放代码:  4,多功能自动播放代码: <EMBED src=http://你的音乐地址 width=0 height=0 loop="999" allowNetworking="internal" allowScriptAccess="never"> 代码中的音乐地址就是网上以.mp3/.m

jbx_jiebaixue的专栏 5382

Winfrom Panel 控件透明效果显示

继承Panel控件然后重写方法 using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; using System.Drawing; namespace DynamicAndStaticImage { public class MyPanel : Pa

liujun198773的专栏 6142

雅致Flash打包工具

雅致Flash打包工具    

912

flash网页布局中层次调节

<embed wmode="transparent" src="FLVPlayer_Progressive.swf" flashvars="&MM_ComponentVersion=1&skinName=Clear_Skin_1&streamName=http://42.96.150.113/a&autoPlay=true&autoRewind=false"

HackProgramer的专栏 1407
上一篇: 条件变量意义及使用规则
下一篇: C++与FLASH交互及视频帧保存方案
testing2007
博客等级 码龄19年 46粉丝 59原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值