Direct2D 1.1 开发笔记 特效篇(一) 使用D2D特效

(转载请注明出处)

问! 为什么使用D2D 1.1版本,而不是1.0版本?

答: D2D 特效

在Direct2D 1.1 中,提供了ID2D1Effect接口,让程序员使用硬件加速的实时特效。这几乎就是使用D2D 1.1的绝对理由。

其他什么 CommandList 什么的,完全不知道嘛╮( ̄▽ ̄)╭

头文件就是d2d1effects.h啥的,不过还要请链接"dxguid.lib"静态库

使用ID2D1DeviceContext::CreateEffect创建D2D特效,

使用ID2D1DeviceContext::DrawImage就可以渲染该特效。

D2D 1.1 提供了不少内建特效,比如高斯模糊什么的。所有内建的特效在这里

在这里就简单介绍几个内建特效。

0. 总概括

输入对象:

请看到ID2D1Effect提供的接口。

一个D2D特效需要有限自然数个输入对象,输入对象也可以使D2D特效(SetInputEffect),

也可以是D2D图像比如ID2D1Bitmap1(SetInput)。

输入0个   可以利用代码生成图像,比如函数图像、高级分形图像什么的。

输入1个   比如高斯模糊,让输入图像模糊。大多数(大概)都是1个

输入多个 比如将多个图像组合到一起

控制变量。

一个特效当然需要不少个控制变量,比如这里的高斯模糊肯定需要一个量来控制模糊程度

继承于ID2D1Properties ,拥有SetValue与SetValueByName来设置变量。

前者使用偏移索引设置,后者使用字符串设置。话说C++没有理由用后者啊,既有宏又有枚举量。肯定是为

其他语言设计的.....

特效分类:

微软蛋疼地将特效分为了几类,比如滤镜特效,高斯模糊就是滤镜。分类不是强制的,

所以了解即可。

下面使用几个内建的特效吧:

1. 高斯模糊

创建:

m_pD2DDeviceContext->CreateEffect(CLSID_D2D1GaussianBlur, &m_pEffectTest);

CLSID_D2D1GaussianBlur是内建特效提供的GUID

设置输入:

m_pEffectTest->SetInput(0, m_pBitmapTest);

0表示第一个输入图像就是m_pBitmapTest

内建的高斯模糊拥有3个控制变量,在"D2D1_GAUSSIANBLUR_PROP"枚举类里里面定义。

用来动态控制程度就需要:

m_pEffectTest->SetValue(D2D1_GAUSSIANBLUR_PROP_STANDARD_DEVIATION, 2.33f);

设置模糊程度为2.33

其他两个可以自己看看: 头文件里面就说得清楚

某灰郑重警告: 撸代码过多会导致视力模糊.

再者。我们需要动态地改变这个量。随着时间推移改变模糊程度是一个不错的选择,但是这样太

丢人了。我们可以创建一个滑块来改变程度,但是太麻烦了。这里直接我们直接在窗口上面点击、滑动

即可,这样仅仅需要处理Windows消息即可,这里处理WM_MOUSEMOVE与WM_LBUTTONDOWN即可。

Windows消息处理不在本文范围,详细可以搜索。

2. 定向模糊

同理。

使用GUID: CLSID_D2D1DirectionalBlur

唯一觉得蛋疼的就是使用的居然不是向量,而是“模糊程度”与"角度".....我觉得使用向量更方便啊。

(撸代码过多会导致视力模糊.)

内建的实在有点多,有些实用,有些不明觉厉。可以抽空再介绍一些,暂时不再说明内建的,

毕竟强大的是自定义特效,这才是本篇的重点。

范例下载: 点击这里

时间: 2024-11-17 18:22:55

Direct2D 1.1 开发笔记 特效篇(一) 使用D2D特效的相关文章

Direct2D 1.1 开发笔记 特效篇(三) 简单的像素着色器特效

(转载请注明出处) 这次我们实现一个自定义的转变. 实现Direct2D 自定义转变Shader Models需要HLSL(High Level Shading Language)的实现. HLSL是Shader的一种实现,但是HLSL只能在D3D中使用,所以有点蛋疼. Shader被描述为显卡执行的小段程序,能够高效(并行)地执行. 没学过?没关系,笔者也没有,但是详细的不会在这里说明(你TM逗我(╯‵□′)╯︵┴─┴),请到官网中看看. D2D 特效能用 HLSL 的  4.0 及其以上版本

Direct2D 1.1 开发笔记 特效篇(二) 简单的自定义特效

(转载请注明出处) 这节就来一个简单的自定义特效作为概念的入门. 首先需要头文件 #include <d2d1effectauthor.h> #include <d2d1effecthelpers.h> 为了实现一个自定义的D2D特效,需要继承ID2D1EffectImpl并实现其接口. 好了,这里因为仅仅是介绍一下概念,所以这次的自定义特效就定为下阴影吧,微软也是这么干的. 实现就用现成的,因为特效的输入也能是特效. Transform: 暂时称为"转变"吧,

Direct2D 1.1 开发笔记 特效篇(四) 图形调试

 (转载请注明出处) 如同上节所述,这节讲讲怎么调试图形. 很可惜,微软并没有对VS Express 2013 for Windows Desktop(下面简称WDExpress)添加图形调试功能. 对于付费版的VS(VS2013 pro对于学生与教员可以免费获取)则带有图形调试功能: 调试--图形--启用诊断 即可. 对于免费版,则有VS Express 2013 for Windows(下面简称VSWinExpress)带有图形调试功能. 幸运地,一个付费版.WDExpress与VSWi

iOS开发笔记 - 网络篇

计算机网络基础 ??计算机网络是多台独立自主的计算机互联而成的系统的总称,最初建立计算机网络的目的是实现信息传递和资源共享. ??如果说计算机是第二次世界大战的产物,那么计算机网络则是美苏冷战的产物.20世纪60年代初期,美国国防部领导的ARPA提出研究一种崭新的.能够适应现代战争的.生存性很强的通信系统并藉此来应对苏联核攻击的威胁,这个决定促使了分组交换网的诞生,也奠定今天计算机网络的原型,这是计算机网络发展史上第一个里程碑式的事件. ??第二个里程碑式的事件是20世纪80年代初,国际标准化组

ONVIF客户端搜索设备获取rtsp地址开发笔记(精华篇)

原文  http://blog.csdn.net/gubenpeiyuan/article/details/25618177 概要: 前言及鸣谢: 感谢guog先生,快活林高先生,onvif全国交流群的的酷夏先生在开发过程中给予的巨大支持,没有你们的帮助开发过程将异常艰难啊.谢谢了! ONVIF介绍: ONVIF致力于通过全球性的开放接口标准来推进 网络视频 在安防市场的应用,这一接口标准将确保不同厂商生产的网络视频产品具有互通性.2008年11月,论坛正式发布了ONVIF第一版规范——ONVI

ONVIFclient搜索设备获取rtsp地址开发笔记(精华篇)

概要: 前言及鸣谢: 感谢guog先生.快活林高先生,onvif全国交流群的的酷夏先生在开发过程中给予的巨大支持,没有你们的帮助开发过程将异常艰难啊.谢谢了! ONVIF介绍: ONVIF致力于通过全球性的开放接口标准来推进网络视频在安防市场的应用,这一接口标准将确保不同厂商生产的网络视频产品具有互通性.2008年11月.论坛正式公布了ONVIF第一版规范--ONVIF核心规范1.0.随着视频监控的网络化应用,产业链的分工将越来越细. 有些厂商专门做摄像头.有些厂商专门做DVS.有些厂商则可能专

iOS开发笔记 - 语言篇之Swift

?2014年的苹果全球开发者大会(WWDC),当Craig Federighi向全世界宣布"We have new programming language"(我们有了新的编程语言)的时候,全场响起了最热烈和持久的掌声,伴随着掌声到来的语言叫Swift.接下来Craig Federighi更是毫不掩饰的告诉大家,Swift将成为主宰iOS和Mac开发的新语言,甚至是整个软件行业中最举足轻重的语言. ??Swift正如它的名字那样迅速.敏捷,但这并不是它的全部.Swift是一个博采众长的

iOS开发笔记 - 工具篇

??工欲善其事,必先利其器.作为一个合格的iOS开发者,熟练的使用各种开发或辅助开发的工具也算是一项必备技能吧,下面是我整理的一些工具及其应用场景和使用方法. 文档浏览工具 - Dash 网络抓包工具 Charles Wireshark 版本控制工具 Github SourceTree CornerStone SQLite数据库可视化工具 SQLiteBrowser Datum 界面调试工具 - Reveal 调试仪表 - Gauge 剖面仪器 - Instruments Allocations

微社区项目开发笔记(前端篇)

这个微社区项目的前端主要用到了JQuery和AJAX技术.用到的插件有jquery.form(表单静态提交).jquery.qqFace(QQ表情).pickadate(日期选择).(在此,我对各个插件的开发者表示由衷的感谢!) 各个插件的使用方法就不详细介绍了,想要了解的可以在网络上搜索. 这里主要介绍一下图片上传的方法: 众所周知,html表单里面提供了上传文件的控件: <input type="file"/> 但是,在追求交互效果的今天,这样的表现方式显然是不好的.所