Managed DirectX中的DirectShow应用(简单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
创建设备
private Device CreateDevice()
{
var device = new Device(); //目前只做成窗口模式,由于全屏模式需要用到Flip,而窗口模式不用使用Flip
device.SetCooperativeLevel(this, CooperativeLevelFlags.Normal); return device;
}
创建切割器
public Clipper CreateCliper()
{
var cp = new Clipper(); cp.Window = this; return cp;
}
创建离屏表面
public Surface CreateOffScreenSurface(Bitmap pBitmap, Clipper pClipper)
{
if (pBitmap == null)
throw new ArgumentNullException("位图不能为空"); //离屏描述
SurfaceDescription sd = new SurfaceDescription();
sd.SurfaceCaps.OffScreenPlain = true;
Surface surOff = null; surOff = new Surface(pBitmap, sd, _device); //设置切割器
if (pClipper != null)
{
surOff.Clipper = pClipper;
} return surOff;
}
在Paint事件中增加代码
private void Form1_Paint(object sender, PaintEventArgs e)
{
Rectangle recSource = this.DisplayRectangle;
Rectangle recTo = M_RctTrance(this.Size); _surPrimary.Draw(recTo, _surBack, recTo, DrawFlags.Wait);
}
显示效果

其他
由于是演示,所以很多异常判断都没做,比如设备丢失,超出显示范围等,做的复杂的可以创建多个图层,且图层上的元素可以拖动,显示Tootip,闪烁,选中等效果,也可以多图层切换。感兴趣可以联系我。
如果要调试的话,由于DirectXDraw的原因,需要在调试->异常->Managed Debugging Assistants->LoaderLock 取消勾选

Demo下载
Managed DirectX中的DirectShow应用(简单Demo及源码)的更多相关文章
- 【Hook技术】实现从"任务管理器"中保护进程不被关闭 + 附带源码 + 进程保护知识扩展
[Hook技术]实现从"任务管理器"中保护进程不被关闭 + 附带源码 + 进程保护知识扩展 公司有个监控程序涉及到进程的保护问题,需要避免用户通过任务管理器结束掉监控进程,这里使用 ...
- 在Winform窗体中使用WPF控件(附源码)
原文:在Winform窗体中使用WPF控件(附源码) 今天是礼拜6,下雨,没有外出,闲暇就写一篇博文讲下如何在Winform中使用WPF控件.原有是我在百度上搜索相关信息无果,遂干脆动手自己实现. W ...
- 【原创】http请求中加号被替换为空格?源码背后的秘密
这是why技术的第**20**篇原创文章
c++实现游戏开发中常用的对象池(含源码) little_stupid_child2017-01-06上传 对象池的五要素: 1.对象集合 2.未使用对象索引集合 3.已使用对象索引集合 4.当前 ...
- chrome浏览器开发者工具F12中某网站的sources下的源码如何批量保存?
目录 chrome浏览器 开发者工具F12中某网站的sources下的源码如何批量保存 1. 常用保存Sources源码的两种方法 1.1单个文件 1.2 单个页面 2. 问题 3.解决方案 chro ...
- 调试过程中发现按f5无法走进jdk源码
debug 模式 ,在fis=new FileInputStream(file); 行打断点 调试过程中发现按f5无法走进jdk源码 package com.lzl.spring.test; impo ...
- 一个简单的IM系统(Demo附源码)-- ESFramework 4.0 快速上手(08)
前面的文章已经介绍完了基于ESFramework/ESPlus进行二次开发的所有要点,现在,我们可以开始小试牛刀了. 本文将介绍使用ESFramework的Rapid引擎开发的两个最简单的Demo,E ...
- Java中集合框架,Collection接口、Set接口、List接口、Map接口,已经常用的它们的实现类,简单的JDK源码分析底层实现
(一)集合框架: Java语言的设计者对常用的数据结构和算法做了一些规范(接口)和实现(实现接口的类).所有抽象出来的数据结构和操作(算法)统称为集合框架. 程序员在具体应用的时候,不必考虑数据结构和 ...
- Linux 部署ASP.NET SQLite 应用 的坎坷之旅 附demo及源码
Linux 部署ASP.NET SQLite 应用 的坎坷之旅.文章底部 附示例代码. 有一台闲置的Linux VPS,尝试着部署一下.NET 程序,结果就踏上了坑之路,不过最后算是完美解决问题,遂记 ...
随机推荐
- 使用maven创建Archetype
Archetype原型 也就是说为项目生成一个原型,可以把这个项目发布,其他人就可以直接通过命令构建一个原型项目了. 其实我一开始也是不知道maven还有这个功能的,但是在使用的springside的 ...
- No.016:3Sum Closest
问题: Given an array S of n integers, find three integers in S such that the sum is closest to a given ...
- CI框架源码阅读笔记1 - 环境准备、基本术语和框架流程
最开始使用CI框架的时候,就打算写一个CI源码阅读的笔记系列,可惜虎头蛇尾,一直没有行动.最近项目少,总算是有了一些时间去写一些东西.于是准备将之前的一些笔记和经验记录下来,一方面权作备忘,另一方面时 ...
- spring MVC @Resource不支持Lazy加载
今天迁一系统时发现有个bean使用@Resource注入了另外一个bean,这个被注入的bean是将被deprecated的类,而且只有一两个功能使用到,为了先调整进行测试,增加了@Lazy注解,启动 ...
- 把GAE程序通过SSH部署到 VPS
大部分在文档上都写了, 写这篇文章的目的是发现现在appcfg.py update xxxx的时候会打开浏览器访问google请求授权(后台内建了一个本地server, 端口是8090, 授权成功后会 ...
- letter-spacing
letter-spacing:3px的意思就是字母之间的间距是3px:
- ZOOM - 简单易用的 jQuery 照片相册插件
jQuery 最令人印象深刻的应用之一就是对图片的处理,它可以让帮助你在你的项目中加入一些让人惊叹的图片切换效果.ZOOM 是一款全屏效果的 jQuery 图片切换展示插件,支持键盘前后按键切换,支持 ...
- Maven发布工程到公共库
1.发布工程 新建一个 Maven build 选择要发布的工程
- windows.open()、close()方法详解
windows.open()方法详解: window.open(URL,name,features,replace)用于载入指定的URL到新的或已存在的窗口中,并返回代表新窗口的Win ...
- jQuery中ajax的4种常用请求方式
jQuery中ajax的4种常用请求方式: 1.$.ajax()返回其创建的 XMLHttpRequest 对象. $.ajax() 只有一个参数:参数 key/value 对象,包含各配置及回调函数 ...