Managed DirectX中的DirectShow应用(简单Demo及源码)_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > Managed DirectX中的DirectShow应用(简单Demo及源码)

Managed DirectX中的DirectShow应用(简单Demo及源码)

 2014/4/17 3:12:47  sinodzh  博客园  我要评论(0)
  • 摘要:阅读目录介绍准备工作环境搭建简单Demo显示效果其他Demo下载介绍DirectX是Microsoft开发的基于Windows平台的一组API,它是为高速的实时动画渲染、交互式音乐和环境音效等高要求应用开发服务的。而ManagedDirectX实质上是对DirectX进行了一个轻量级的封装,Microsoft在2003年10月初发布了MicrosoftDirectX9.0SDKUpdate(Summer2003),其中就着重改进了ManagedDirectX部分。一方面使它能与
  • 标签:源码 应用

阅读目录

  • 介绍
  • 准备工作
  • 环境搭建
  • 简单Demo
  • 显示效果
  • 其他
  • Demo下载

 

介绍

  DirectX是Microsoft开发的基于Windows平台的一组API,它是为高速的实时动画渲染、交互式音乐和环境音效等高要求应用开发服务的。 

  而Managed DirectX 实质上是对DirectX进行了一个轻量级的封装,Microsoft在2003年10月初发布了Microsoft DirectX 9.0 SDK Update (Summer 2003),其中就着重改进了Managed DirectX部分。一方面使它能与.NET Framework紧密集成,可供.NET 平台下的其他语言调用 (如C#);另一方面对DirectX程序编写进行了进一步简化,使得DirectX向RAD开发的方向又迈进了一大步,如我们所知ASP.NET、 WinForm这些东西是在网络上运行的。使得在网页上看到有硬件加速支持的绚丽的3D动画实时演示成为可能。

  DirectX的核心是DirectX3D,但早期也是有DirectXDraw(2D),后来2D融入到了3D中,原来有个项目的图形展示控件是用DirectDraw实现的,为了纪念这些曾经带来过效益的技术,将这个技术的使用大致讲解下。

准备工作

  下载5.0以上的Managed DirectX SDK包。

  其中有Microsoft.DirectX.DirectDraw.dll,Microsoft.DirectX.dll 这两个DLL是我们需要的。

环境搭建

  新建工程DirectXShowDemo,选择Framework2.0(也可以选其他,不过得在app.config中标注下)

简单Demo

创建设备

 

1         private Device CreateDevice()
2         {
3             var device = new Device();
4 
5             //目前只做成窗口模式,由于全屏模式需要用到Flip,而窗口模式不用使用Flip
6             device.SetCooperativeLevel(this, CooperativeLevelFlags.Normal);
7 
8             return device;
9         }

创建切割器

1         public Clipper CreateCliper()
2         {
3             var cp = new Clipper();
4 
5             cp.Window = this;
6 
7             return cp;
8         } 

创建离屏表面

 1         public Surface CreateOffScreenSurface(Bitmap pBitmap, Clipper pClipper)
 2         {
 3             if (pBitmap == null)
 4                 throw new ArgumentNullException("位图不能为空");
 5 
 6             //离屏描述
 7             SurfaceDescription sd = new SurfaceDescription();
 8             sd.SurfaceCaps.OffScreenPlain = true;
 9             Surface surOff = null;
10 
11 
12             surOff = new Surface(pBitmap, sd, _device);
13 
14             //设置切割器
15             if (pClipper != null)
16             {
17                 surOff.Clipper = pClipper;
18             }
19 
20             return surOff;
21         }

在Paint事件中增加代码

1         private void Form1_Paint(object sender, PaintEventArgs e)
2         {
3             Rectangle recSource = this.DisplayRectangle;
4             Rectangle recTo = M_RctTrance(this.Size);
5 
6             _surPrimary.Draw(recTo, _surBack, recTo, DrawFlags.Wait);
7         }

显示效果

 

其他

  由于是演示,所以很多异常判断都没做,比如设备丢失,超出显示范围等,做的复杂的可以创建多个图层,且图层上的元素可以拖动,显示Tootip,闪烁,选中等效果,也可以多图层切换。感兴趣可以联系我。

Demo下载

源码下载

     

  

发表评论
用户名: 匿名