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**篇原创文章![在这里插入图片描述](https://user-gold-cdn.xitu.io/2019/12/30/16f550eb82e10eff?w=900& ...
- c++实现游戏开发中常用的对象池(含源码)
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 程序,结果就踏上了坑之路,不过最后算是完美解决问题,遂记 ...
随机推荐
- 反编译APK文件
有时源代码丢失了,这时如果有apk文件的话,是可以对apk文件反编译得到源文件的,本文介绍一下简单的反编译apk文件的过程. 1.工具 反编译apk需要的工具有两个:apk2java和apktool, ...
- 2016暑假多校联合---To My Girlfriend
2016暑假多校联合---To My Girlfriend Problem Description Dear Guo I never forget the moment I met with you. ...
- 电子商务中:B2C、B2B、C2B、C2C、O2O、P2P
c2c实际是电子商务的专业用语,是个人与个人之间的电子商务.比如一个消费者有一台电脑,通过网络进行交易,把它出售给另外一个消费者,此种交易类型就称为C2C电子商务.淘宝是属于C2C模式的. c2 ...
- Java--关于计算表达式中赋值的细节问题
public class Test { public static void main(String[] args) { int t = 0; int p = 0; int q = 0; int ta ...
- Python多线程学习
一.Python中的线程使用: Python中使用线程有两种方式:函数或者用类来包装线程对象. 1. 函数式:调用thread模块中的start_new_thread()函数来产生新线程.如下例: ...
- 【转载】GUID vs INT Debate
I recently read a blog post on what was better using GUIDs or Integer values. This is been an age lo ...
- ASP.NET MVC Model绑定的简单应用
Model绑定是 MVC 框架根据 HTTP 请求数据创建 .NET 对象的一个过程. 一.简单类型 1.单一值
- 初探百度F.I.S — 由工具到解决方案
1. 前言 阅兵放假三天,我哪儿也没去,宅着看了一些东东:git命令行.svn命令以及下面的主角——百度FIS.对看过的git.svn的命令也做了一些总结,请参见:<git命令学习笔记>和 ...
- 最简单的轮播广告(原生JS)
改变每个图片的opacity属性:来自学友刘斌 素材图片: <!DOCTYPE html> <html lang="en"> <head> &l ...
- go语言 新手学习笔记 go基础教程
目前这方面的资料相对较少,自己手动整理汇集. 第一章:安装 第一节:下载go语言 第二节:windows 安装 go语言 第三节: 第二章:基本语法 第一节:类型 .