详细描述
以下结合附图提供的详细描述旨在作为对本示例的描述,而非旨在表示可构造或使用本示例的唯一形式。本描述阐明了各示例的功能和用于构造和操作各示例的步骤序列。然而,可以由不同的示例来完成相同或等价的功能和序列。
虽然本示例此处被描述和示出为在计算机系统中实现,但是所描述的系统是作为示例而非限制来提供的。本领域的技术人员会理解,本示例适于应用在各种不同类型的计算和图形系统中。
在整个描述中使用了多个术语,这些术语在以下明确定义。以下定义意在取代可能在本领域中已知的任何替换性定义。
活动内容-诸如按钮、组合框、编辑域、复选框、图像、视频等能够支持某种形式的用户交互或以某种形式动画表现的视觉元素。活动内容可以在存储器中呈现而无需在屏幕上显示。
效果(Effect)-效果是构成效果图(EffectGraph)(即有向无环图(DAG))的对象。
效果图元(EffectPrimitive)-这是基本效果。它不包含任何子效果。它是开发者一般创建的效果。这是对效果作出实际像素处理的对象。
效果-该术语通常在可以使用或指定Effect或EffectPrimitive时使用。
效果图(EffectGraph)-这是指整个效果图(即是一个或多个DAG中的最高效果的某个效果)。
引脚-这用于描述由效果展示的用于将效果连接在一起或用于其它目的的连接点(经由IMILBitmapEffectInputConnector(IMIL位图效果输入连接器))。
光栅图形-这是作为像素集合的图形的表示,通常是以矩形网格或位图的形式。该术语通常相对于术语“矢量图形”来使用。
矢量图形-也称为几何建模,这是使用诸如点、直线、曲线和多边形等几何图元来表示计算机图形中的图像。该术语通常相对于术语“光栅图形”来使用。
视觉元素-这是在存储器中或显示器、电子画布、用户界面等上呈现的诸如按钮、编辑域、图像、菜单、图标或任何其他交互式或动画图形构造等图形构造。视觉元素可以是光栅图形元素、矢量图形元素或任何其他类型的图形构造。
图1是显示示例性效果对象100的框图。效果是诸如104a-104d等形成有向无环图(DAG)的一个或多个效果图元的集合。该效果DAG通常被封装在展示IMILBitmapEffect(IMIL位图效果)106的单个对象100中。效果100内的每个元素或者是另一效果(即展示出IMILBitmapEffect),或者是效果图元(即展示出IMILBitmapEffectPrimitive 107)。每个效果可以具有诸如输入108等零个或多个输入,和诸如输出109等输出。每个输入/输出引脚由诸如示例102和102等IMILBitmapEffectConnector(IMIL位图效果连接器)来描述。这些被例如示例性连接110连接在一起,以形成通过效果DAG的数据流路径。
效果100可用于为活动内容提供位图形式的视觉效果,这些活动内容包括诸如按钮、编辑域、视频图形或显示器、画布、用户界面等的任何其他交互式或动画视觉元素等视觉元素。效果100也可用于将视觉效果应用于存储器中的位图,而无需曾经显示位图。此外,效果100可以表现描述其输入的属性的其他特性。例如,位图效果(BitmapEffect)可以表示出色彩柱状图信息或面部检测信息。所提供的特定效果一般由诸如示例性下锅100等效果中包含的效果和效果图元来确定的。
通常在诸如输入101等示例性效果100的输入处提供视觉元素的位图。输入位图由效果100处理,以提供效果(或效果的集合,如果效果包括诸如104a-104d等多个效果图元或其他效果),而包括效果的位图在诸如输出102等效果100输出处提供。
图2是显示包括各种输入和输出引脚的示例性效果对象200的框图。展示诸如引脚210等一组输入/输出引脚而非仅展示输出图像的优势是这种引脚允许查询效果的输入和输出格式以及其他信息,而无需实际运行效果。每个引脚可以接受/生成多种格式的图像。引脚接受/生成的格式可以通过IMILBitmapEffectInputConnector或IMILBitmapEffectOutputConnector(IMIL位图效果输出连接器)接口的GetFormat()(获得格式)和GetNumberFormats()(获得数字格式)方法来枚举。每个引脚也可以具有最优格式-效果期望在其输入/输出处接受/生成的格式。如果两个连接的引脚具有相同的最优格式而非通常使用的格式。否则,通常基于在效果图形的结尾处请求的初始输出格式来确定某些其他的匹配格式。如果没有互相匹配的格式,那么当数据从一个效果的输入流到下一个效果的输入时会发生转换,如结合图3所示的。
图3是显示包含两个效果图元的示例性效果对象300的框图,每个效果图元支持各种输入和输出格式。效果图元1被示为支持两种输出格式,MILPixelFormat24bbpBGR(MIL像素格式24bbp BGR)-由星号所示的最优输出,和第二输出格式,MILPixelFormat32bppARGB(MIL像素格式32bbpARGB),效果图元2被示为支持两种输入格式,其中最优输入格式与效果图元1的最优输出格式的最优输出格式相同。效果图元1和效果图元2之间的连接310不会导致格式转换,因为它们共享MILPixelFormat24bppBGR的最优格式类型。效果图元1将被请求以其最优格式输出,并且结果将被传递到效果图元2中。
效果图元2被示为支持单个输出格式,MILPixelFormat32bppGray(MIL像素格式32bpp灰色)(其最优格式如星号所示),并且被连接320到效果300的单个输出330。但是效果300的唯一输出格式是MILPixelFormat32bppARGB,不同于效果图元2的唯一输出格式。因此,在效果图元2的输出和整个效果图300的输出之间将发生转换。
在如何处理格式失配的一个示例中,如果在图形和连接到图形输出的效果之间最优格式不匹配,那么将请求最近请求的格式(即MILPixelFormat32bppGray,如图3中所示)。如果最近请求的输出格式不是作为图形的输出而存在的,那么可以选择随机格式。
DAG中的每个输出引脚(IMILBitmapEffectOutputConnector)可以被链接到另一效果的输入引脚,只要它保持图形的无环特性。该链接可以是一对多(即单个输出连接可以链接到多个输入连接,但反之则不然)。
图4是显示示例性效果对象400的框图。在该示例中,效果对象400是由诸如C#(C升半音号)等受控代码构建的包装(wrapper)420组成的,它包含对实际效果代码410的非受控实现,以诸如C++等代码来实现。示例性对象400包括单个输入401和单个输出490。在替换性示例中,可以提供多个输入和/或输出。在需要或提供格式转换的情况下,这种转换代码通常被包括在包装420中。或者,转换代码可以被包括在非受控代码部分410中,或是由某一其他模块提供。
同样包括作为效果对象400的一部分的是变换函数F(p)430。在一个示例中,包括变换函数430作为非受控代码410的一部分。变换430是变换通常采用位图形式的输入视觉元素,以提供具有某些新的视觉效果的视觉元素的函数。一般而言,这种变换函数430可以被应用于作为光栅图形构造、矢量图形构造等的视觉元素上。
例如,假设期望在用户界面中提供一按钮,并且当鼠标位于该按钮上方时使得该按钮“发光”。在这种情况下,可以创建发光效果对象,并且使其与按钮相关联,发光效果的变换函数对按钮位图执行操作,以使其看起来发光。注意,按钮的功能保持不变-仅按钮的视觉方面被效果所修改。即,用户仍然可以使得鼠标光标悬停在按钮上方、点击按钮等,而按钮会如期望地表现。
在常规的用户界面中,通常采用“命中测试(hit testing)”来确定是否应该将诸如鼠标点击或键击等某一用户输入应用于视觉元素或活动内容。即,例如当用户点击按钮时,命中测试代码测试鼠标点击的坐标以确定点击是否是对按钮作出的。如果是,那么按钮相应地响应,诸如在下方的位置重画自己、启动与按钮相关联的功能等。
在视觉效果与按钮相关联的情况下,重要的是命中测试继续如期望地运作。使用发光效果对象的示例,当鼠标光标悬停在按钮上方时,相关联的发光效果对象会导致按钮具有发光的外观。除了发光效果之外,由于鼠标位于上方事件,按钮也会如其通常所做的那样突出显示。点击安妮也会产生期望的结果。在一个示例中,效果对象可以与视觉元素相关联,作为元素的特性。
图5是显示应用爆炸效果之前和之后的示例性按钮的框图。考虑产生爆炸效果的效果对象-使得相关联的视觉元素分裂成若干个碎片,并随着时间的推移在用户界面上散布它们。图5提供了这种效果之前和之后的示例。
在画面501-“之前”画面中,用户界面(UI)500被示为具有应用爆炸效果之前的常规按钮502,这可能是按钮上的鼠标位于上方事件或点击事件的结果。画面502-“之后”画面显示具有应用爆炸效果后的按钮504的同一用户界面500。按钮504被示为分裂成三个碎片504a-504c,其每一个在UI 500上彼此分离。
该爆炸效果是部分地通过爆炸变换函数来实现的,该爆炸变换函数将输入按钮位图的每个比特映射到新的位置,诸如若干个碎片中。在诸如爆炸的“移开”方面,这种映射会随着时间改变,可能直至碎片“停留”在UI上的某处。
不管变换如何,按钮都如期望地继续运作。即,用户可以点击经爆炸的按钮504的任何碎片,而按钮会如同它没有爆炸一样。这意味着命中测试代码继续如期望地运作。这是通过用户事件经过效果对象并且变换函数确定按钮是否被“命中”来促进的。通常这是通过反向解出变换函数或通过使用双向变换函数来完成的。
变换函数可以执行仿射变换或非仿射变换。例如,仿射变换可以包括放大、收缩、伸展或旋转位图。非仿射变换可以包括诸如模糊、发光、变灰、暗淡、消退、闪耀、闪烁、闪光、变形或在其中以某种方式添加、删除和/或修改位图的元素的任何其他类似效果等效果。此外,变换函数可以不转变输入位图的所有原始比特,诸如当提供消失、收缩、离开、将直线变换成点等效果时。其他可能的变换包括漩涡、波动、分裂、复制、将多个位图合并成一个等。在某些情况下,效果可导致来自输入位图的比特被映射到多个位置、任意的位置或一起消失。在所有进行的示例中,变换函数也提供指示经修改的比特是否被某个用户“命中”,以确保命中测试功能继续如期望地运作的能力。
图6是显示用于向视觉元素提供一种或多个效果的示例性方法600的框图。在图1中所示并且在下文中方法600的描述中使用的诸如效果对象100等效果对象可以使用这种方法600。
在框610处,方法600以在效果对象100的输入处提供视觉元素位图开始。这可以通过任意数目的常规软件进程和/或技术发生。
在框620处,一测试判定在效果对象100DAG中是否包含下一效果图元来处理位图。如图1中所示,效果对象可以包含效果图元和/或其他效果对象,其一个或多个输入连接到效果对象100的输入,并且每一输出连接到一个或多个其他效果图元和/或效果输入或效果对象100的输出。如果有下一效果图元,那么方法600继续到框650处。否则方法600继续到框630处。
在框630处,一测试判定在对象100DAG中是否包含下一效果对象。如果有下一效果对象,假定为“效果B”,那么该方法继续到针对效果B的框610处。否则方法600继续到框640处。
在框640处,输入位图完成由效果对象100的处理,并在输出处提供经处理的位图。这可以通过任意数目的常规软件进程和/或技术发生。
在框650处,在下一效果图元的输入处提供已由任何在前的效果图元和/或效果处理的位图。这可以通过任意数目的常规软件进程和/或技术发生。
在框660处,一测试判定位图是否是用于效果图元的处理的可接受的格式。如果是,那么方法继续到的框680处。否则方法600继续到框670处。
在框670处,位图被转换或重新格式化成可接受的格式以供下一效果图元处理。在一个示例中,位图可以被重新格式化成最优格式。
在框680处,将诸如图4中所示的变换函数F(p)430等变换函数应用于输入位图,这通常导致效果被应用于位图或从输入位图生成的新的位图,该新的位图包括效果。方法600继续到框620处。
图7是示出用于变换命中坐标以便对已应用了效果的视觉元素进行准确的命中测试的示例性方法700的框图。由于具有效果的视觉元素可被置于用户界面上而非是它没有效果,因此通常需要对诸如鼠标点击或悬停在上方事件等命中坐标的变换来确保适当的命中测试。诸如图1中所示并且在下文中方法700描述中使用的效果对象可以使用这种方法700。
在框710处,方法700以将诸如鼠标点击或鼠标在上方事件等用户事件的坐标提供给效果对象100的输入开始。这可以通过任意数目的常规软件进程和/或技术发生。
在框720处,一测试判定在效果对象100DAG中是否包含在前的效果图元,用于变换坐标。如图1中所示,诸如示例性效果100等效果对象可以包含效果图元和/或其他效果对象,其一个或多个输入连接到效果对象100的输入,而其每一输出连接到一个或多个其他效果图元和/或效果输入或效果对象100的输出。方法700以DAG中的最后一个这种效果对象开始,并且向前运作以完成坐标变换。“在前的”效果对象是DAG中从效果对象的输出处开始并且朝着效果对象的输入向回运作通过DAG中的任何效果对象的效果对象。例如,效果图元104d在效果对象100输出102之前,效果图元104a、104b和104c在104d之前,而效果图元104b也在104c之前。如果有在前的效果图元,那么方法700继续到框730处。否则,方法700继续到框740处。
在框730处,将诸如图4中所示的变换函数F(p)430等变换函数应用于用户位图的坐标。通常,反向应用变换函数。方法700继续到框720处。
在框740处,一测试判定测在效果对象100DAG中是否包含在前的效果对象。如果有在前的效果对象,假定为“效果A”,那么方法继续到针对效果A的框710处。否则方法700继续到框750处。
在框750处,方法700将用户事件的经变换的坐标提供给命中测试代码等。
图8是示出可在依照本发明的一个或多个实现中使用的通用计算环境800的框图。计算系统环境800仅为合适的操作环境的一个示例,并非对要求保护的主题的使用范围或功能提出任何局限。也不应将计算环境800解释为对示例性操作环境800中示出的任一组件或其组合具有任何依赖性或需求。
所描述的技术和对象可用许多其他通用或专用计算系统环境或配置操作。适合使用的公知的计算系统、环境和/或配置的示例包括但不限于个人计算机、服务器计算机、手持式或膝上型设备、多处理器系统、基于微处理器的系统、机顶盒、可编程消费电子产品、网络PC、微型计算机、大型计算机、包括任何以上系统或设备的分布式计算环境等等。
以下描述可以在诸如程序模块等由计算机执行的计算机可执行指令的一般上下文中表达。一般而言,程序模块包括例程、程序、对象、组件、数据结构等等,它们执行特定的任务或实现特定的抽象数据类型。所描述的实现还可在其中任务由通过通信网络链接的远程处理设备来执行的分布式计算环境中实施。在分布式计算环境中,程序模块可以位于包括存储器存储设备的本地和远程计算机存储介质中。
参考图8,用于实现本发明的示例性系统包括计算机810形式的通用计算设备。计算机810的组件可包括但不限于,处理单元820、系统存储器830以及将包括系统存储器的各类系统组件耦合至处理单元820的系统总线821。系统总线821可以是若干种总线结构的任一种,包括存储器总线或存储器控制器、外围总线以及使用各类总线体系结构的任一种的局部总线。作为示例而非局限,这类体系结构包括工业标准体系结构(ISA)总线、微通道体系结构(MCA)总线、增强ISA(EISA)总线、视频电子技术标准协会(VESA)局部总线、高级图形端口(AGP)总线、以及外围部件互连(PCI)总线(也称为背板(Mezzanine)总线)。
计算机810通常包括各种计算机可读介质。计算机可读介质可以是可由计算机810访问的任一可用介质,诸如易失性和非易失性介质、可移动和不可移动介质。作为示例而非局限,计算机可读介质包括计算机存储介质和通信介质。计算机存储介质包括以用于储存诸如计算机可读指令、数据结构、程序模块或其它数据等信息的任一方法或技术实现的易失性和非易失性,可移动和不可移动介质。计算机存储介质包括但不限于,RAM、ROM、EEPROM、闪存或其它存储器技术、CD-ROM、数字视频盘(DVD)或其它光盘存储、磁盒、磁带、磁盘存储或其它磁存储设备、或可以用来储存所期望的信息并可由计算机800访问的任一其它介质。通信介质通常体现计算机可读指令、数据结构和/或程序。任一上述的组合也应该包括在计算机可读介质的范围内。
系统存储器830包括易失性和/或非易失性存储器形式的计算机存储介质,如只读存储器(ROM)831和随机存取存储器(RAM)832。基本输入/输出系统833(BIOS)包括如在启动时帮助在计算机810内的元件之间传输信息的基本例程,它通常储存在ROM 831中。RAM 832通常包含处理单元820立即可访问和/或当前正在操作的数据和/或程序模块。作为示例而非局限,图8示出了操作系统834、应用程序835、其它程序模块836和程序数据837。
计算机810也可包括其它可移动/不可移动、易失性/非易失性计算机存储介质。仅作示例,图8示出了对不可移动、非易失性磁介质进行读写的硬盘驱动器841、对可移动、非易失性磁盘852进行读写的磁盘驱动器851,以及对可移动、非易失性光盘856,如CD ROM或其它光介质进行读写的光盘驱动器155。可以在示例性操作环境中使用的其它可移动/不可移动、易失性/非易失性计算机存储介质包括但不限于,磁带盒、闪存卡、数字视频盘(DVD)、数字录像带、固态RAM、固态ROM等等。硬盘驱动器841通常通过不可移动存储器接口,如接口840连接到系统总线821,磁盘驱动器851和光盘驱动器855通常通过可移动存储器接口,如接口850连接到系统总线821。
上文讨论并在图8示出的驱动器及其关联的计算机存储介质为计算机810提供了计算机可读指令、数据结构、程序模块和其它数据的存储。例如,在图8中,示出硬盘驱动器841储存操作系统844、应用程序845、其它程序模块846和程序数据847。注意,这些组件可以各自与操作系统834、应用程序835、其它程序模块836和程序数据837相同,也可以与它们不同。此处对操作系统844、应用程序845、其它程序模块846和程序数据847给予不同的标号来说明至少它们是不同的副本。用户可以通过输入设备,如键盘862和定点设备861(通常指鼠标、跟踪球或触摸垫)向计算机810输入命令和信息。其它输入设备(未示出)可包括话筒、操纵杆、游戏手柄、圆盘式卫星天线、扫描仪等等。这些和其它输入设备通常通过耦合至系统总线的用户输入接口860连接至处理单元820,但是也可以通过其它接口和总线结构连接,如并行端口、游戏端口或通用串行总线(USB)。监视器891或其它类型的显示设备也通过接口,如视频接口890连接至系统总线821。除了监视器之外,计算机还可包括其它外围输出设备,如扬声器897和打印机896,它们通过输出外围接口895连接。也可以包括能够捕捉图像序列864的摄像机863(诸如数码/电子照相机或摄影机,或胶片/照相扫描仪),作为到个人计算机810的输入设备。此外,虽然只描述了一个摄像机,但是可以包括多个摄像机作为到个人计算机810的输入设备。来自一个或多个摄像机的图像864经由适当的摄像机接口865被输入到计算机810。该接口865被连接到系统总线821,由此使得图像能够被路由到RAM832或与计算机810相关联的其他数据存储设备之一并存储在其中。然而,应该注意也可以从上述计算机可读介质的任一个将图像数据输入到计算机810种,而无需使用摄像机863。
计算机810可以使用到一个或多个远程计算机,如远程计算机880的逻辑连接在网络化环境中操作。远程计算机880可以是个人计算机、服务器、路由器、网络PC、对等设备或其它常见的网络节点,并通常包括许多或所有相对于计算机810所描述的元件,尽管在图8中仅示出了存储器存储设备881。图8描述的逻辑连接包括局域网(LAN)871和广域网(WAN)873,但也可或是或者包括其它网络。这类网络环境常见于家庭、办公室、企业范围计算机网络、内联网以及因特网。
当在LAN联网环境中使用时,计算机810通过网络接口或适配器870连接至LAN 871。当在WAN联网环境中使用时,计算机810通常包括调制解调器872或用于通过WAN 873,如因特网建立通信的其它装置。调制解调器872可以是内置或外置的,它通过用户输入接口860或其它适当的机制连接至系统总线821。在网络化环境中,相对于计算机810所描述的程序模块或其部分可储存在远程存储器存储设备中。作为示例而非局限,图8示出远程应用程序885驻留在存储器设备881上。可以理解,示出的网络连接是示例性的,也可以使用在计算机之间建立通信链路的其它手段。
虽然示出和描述了一个或多个示例性实现,但是应该理解可以对其作出各种改变而不背离此处所附的权利要求的精神和范围。