CN1534511A - 视窗和背景图形接口 - Google Patents
视窗和背景图形接口 Download PDFInfo
- Publication number
- CN1534511A CN1534511A CNA031457363A CN03145736A CN1534511A CN 1534511 A CN1534511 A CN 1534511A CN A031457363 A CNA031457363 A CN A031457363A CN 03145736 A CN03145736 A CN 03145736A CN 1534511 A CN1534511 A CN 1534511A
- Authority
- CN
- China
- Prior art keywords
- data
- public
- paintbrush
- icon
- picture
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/38—Creation or generation of source code for implementing user interfaces
-
- A—HUMAN NECESSITIES
- A63—SPORTS; GAMES; AMUSEMENTS
- A63B—APPARATUS FOR PHYSICAL TRAINING, GYMNASTICS, SWIMMING, CLIMBING, OR FENCING; BALL GAMES; TRAINING EQUIPMENT
- A63B53/00—Golf clubs
- A63B53/12—Metallic shafts
-
- A—HUMAN NECESSITIES
- A63—SPORTS; GAMES; AMUSEMENTS
- A63B—APPARATUS FOR PHYSICAL TRAINING, GYMNASTICS, SWIMMING, CLIMBING, OR FENCING; BALL GAMES; TRAINING EQUIPMENT
- A63B53/00—Golf clubs
- A63B53/10—Non-metallic shafts
-
- A—HUMAN NECESSITIES
- A63—SPORTS; GAMES; AMUSEMENTS
- A63B—APPARATUS FOR PHYSICAL TRAINING, GYMNASTICS, SWIMMING, CLIMBING, OR FENCING; BALL GAMES; TRAINING EQUIPMENT
- A63B53/00—Golf clubs
- A63B53/14—Handles
-
- A—HUMAN NECESSITIES
- A63—SPORTS; GAMES; AMUSEMENTS
- A63B—APPARATUS FOR PHYSICAL TRAINING, GYMNASTICS, SWIMMING, CLIMBING, OR FENCING; BALL GAMES; TRAINING EQUIPMENT
- A63B60/00—Details or accessories of golf clubs, bats, rackets or the like
- A63B60/06—Handles
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T11/00—2D [Two Dimensional] image generation
- G06T11/60—Editing figures and text; Combining figures or text
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2210/00—Indexing scheme for image generation or computer graphics
- G06T2210/61—Scene description
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Health & Medical Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Physical Education & Sports Medicine (AREA)
- Human Computer Interaction (AREA)
- Processing Or Creating Images (AREA)
- Image Generation (AREA)
- User Interface Of Digital Computer (AREA)
Abstract
采用应用程序界面(API)实现的方法和系统,并且图标模型允许程序代码开发者采用与背景图形数据结构一致的方法对接输出图形。通过该界面,程序代码可以将诸如几何数据、图像数据、动画数据和其它数据的画图图元写入到表示画图表面的视窗中,其中,视窗包括有效视窗图标、画图视窗图标和表面视窗图标。代码也可以指定视窗的变换、剪辑和不透明性能,以及对其它视窗增加子视窗,以构成层次的背景图形。视窗管理器传递背景图形,以向低层图形元件提供丰富的图形数据。
Description
相关应用的相互参照
本发明涉及以下在2002年6月27日申请尚未决定的美国专利申请:序列号No.10/184,795名为“多层图形处理系统和方法”;序列号No.10/184,796名为“背景图形的通用参数”;序列号No.10/185,775名为“适用于即时模式图形的智能缓冲数据的结构”;以及同时申请的美国专利申请:名为“适用于矢量图形的标识语言和图标模型”(代理人牌号No.3480)。各个相关专利申请都转让于本专利申请的受让人,并因此通过参照而结合于本发明。
技术领域
本发明主要涉及计算机系统,更确切地说,涉及适用于计算系统显示的图形和其它视频信息的处理。
发明背景
因为部分受限于存储器和总线的速度不能保持与主处理器和/或图形处理器相同的进步,所以已经达到了传统存取计算系统中图形的即时模式模型的限制。一般来说,当需要复杂的图形效果时,用于准备帧的当前(即,WM_PAINT)模型就需要处理很多数据来保持硬件的刷新率。因此,当试图采用常规的图形模型来获得复杂的图形效果时,代替完成对下一帧即时产生预期视窗效果的变化,该变化可以添加于不同的帧,这就会引起不希望看到的和显而易见的结果。
在以下序列号为No.10/184,795,10/184,796和10/185,775的美国专利申请中讨论了适用于控制图形输出的新模型。该新模型在图形处理技术方面提供了许多明显的改进。例如,美国专利序列号为No.10/184,795主要提出了多层图形处理系统和方法,其中,较高层元件(例如,操作系统)以较低的工作速度来计算性地进行构建背景图形、更新动画参数以及移动背景图形的数据结构的集中方面的工作,以便于简化低层元件的数据结构和/或图形命令。因为高层处理大大简化了数据,所以低层元件就能够以较快的速度(相对于高层元件),例如,相当于图形子系统的帧刷新速度的速度,将数据处理成用于图形子系统的恒定输出数据。当采用动画时,替代了重画整个具有变化的背景,低层处理可以根据需要来插入参数的间隔,以获得在对各帧提供少许变化背景的表演时的瞬间数值,从而提供平滑的动画。
美国专利序列号No.10/184,796讨论了参数化的背景图形,并提供多种(动画)的数值和参数图形包,以便于要画图形的程序代码(例如,应用程序或操作系统)可以选择性地变化背景图形所描述的一些方面,同时完整无缺地保留其它方面。程序代码也可以采用可能不同的参数再用于背景图形的已经构成的部分。正如所能理解的那样,在整体的图形处理效率方面,通过背景图形现存部分的参数化和/或再使用较容易地变化显示内容的能力提供了基本相同的效果。
美国专利序列号No.10/185,775主要讨论了用于通过背景图形中的图标和数据来存储视窗信息的高速缓存数据结构和相关机制。该数据结构主要是与如何组装和使用视窗信息的智能控制的机制有关。例如,除了应用程序的特殊请求以外,存储在数据结构中的大多数信息对应用程序没有其它的参考意义,这就使得该信息需要再优化或者用于其它处理。正如所能理解的那样,这就提供了资源的效率和平衡,例如,在高速缓存数据结构中的数据能够处理成不同的格式,这种格式可以更加紧凑和/或减少后续、重复处理的需要,例如,位图或其它后处理的结果。
尽管上述改进在图形处理技术方面提供了实质性的益处,但是仍存在着需要进一步有效地使用这种改进的图形模型以及直接使用它的其它相关改进。还需要进一步更深入全面地了解采用许多性能的程序以及由改进图形模型所提供的图形处理能力,从而以有效的方式输出复杂的图形。
发明内容
简单地说,本发明提供了一个图标模型,以及用于访问该图标模型的应用程序接口,其方式是允许程序代码开发器能始终采用背景图形数据结构的接口来产生图形。在该模型中的基本图标和API组是一视窗,这表示向用户提供了视窗的表面;背景图形是由视窗图标的建立。这种视窗包括了集约视窗图标、确认视窗图标、画视窗图标以及表面视窗图标。视窗本身可以保持在资源图标上,例如,剪辑图标、转换图标等等,以及其它类型的视窗(例如,画图视窗,确认视窗)都可以保持在画图指令列表中,该图标可以参考资源图标,例如,图像、漆刷和/或梯度。
在背景图形中的典型资源图标一旦创建之后是不变的,即,一旦它们被创建之后,它们是不可改变的。值得注意的是,视窗通常并不被认为是资源,并且视窗也不认为范围不变,例如,程序代码可以替代转移到视窗所指的地方,但是却不能改变该转移的本身,因为该转移是不可改变的。可以采用一个构造器来定义图标或者使用一个伴生的编制器来定义图标。
通过应用程序接口,程序代码写入图形图元,例如,几何数据、图像数据、动画数据以及其它视窗的数据。例如,程序代码图形图元写入视窗,可以包括,画线的指令、画几何图形的指令,画位图的指令以及其它。这些所画的指令经常与复杂的数据相组合,这些数据可类似于讨论路径如何画的几何数据,也可以是参考资源,例如,位图、矢量等等。
代码也能够在视窗上指定转换、剪辑和不透明的特性,并且提供了压入和弹出转换、不透明和命中测试标识的方法。此外,视窗具有控制如何参与命中测试的标志。程序代码也与视窗连接,用于添加子视窗,从而可以构建层次的背景图形。视窗管理器处理(即,传送和转换)背景图形,以向低层图形元件提供丰富的图形数据。
集约视窗规定了子视窗的集成,并且在一个实现中只是一个能够定义层次的视窗。在集约视窗中的子视窗集成允许子视窗的随意插入、删去和记录。
画图视窗可采用打开调用来打开,该打开调用可将画图的内容(即,画图图表的参考)返回到调用器。一般来说,画图内容是暂时帮助图表,它时常用于组装视窗。随后,程序代码使用画图内容将图画图元添加在视窗上。打开调用可以清除视窗的内容(子视窗),或者附加调用可以用于打开一个视窗以附加在当前视窗上。除了接受静态数值作为画图参数以外,画图的内容也可以采用动画图表来填充。
确认视窗以类似的方式工作来画出视窗,只有当系统要求填充内容时才采用它的画图内容来填充,而不是当程序代码需要填充内容时来填充的。表面视窗用于显示像素数据的位图,该位图对应于由像素内容所填充的画图数据,或者是提供像素数据的表面视窗管理器所传送另一个视窗的子图形。系统提供画图内容的实现,它可以直接画在表面上,以及表面视窗管理器可以用于将视窗背景图形组合在表面上。也讨论了另一些类型的视窗。
于是,不同类型的图元可以使用画图的内容(包括,几何、图像数据和视频数据)画入视窗。几何是一种类型,它可以定义在没有笔划和填充(例如,矩形)条件下的矢量图形架构。各种几何图标对应于简单形状(线状几何、椭圆几何、矩形几何),复杂单个形状(路径几何),或者这类与组合操作所指定的(例如,合并、交叉等等)形状的表格。这些图标形成了一类层次。这也是用于画出经常使用的几何类型的捷径,例如,画矩形的方法。
当画几何图形时,可以指定漆刷或画笔。漆刷图标定义了如何图形填充平面,并且有一类层次的漆刷图标。画笔也有一个指定用于它所讨论的如何填充笔划区域的漆刷。所指定类型的漆刷图标(视窗漆刷)能够参考一个视窗,以定义该漆刷是如何画的。
本发明的其它功能和优点将通过以下结合附图的详细讨论而变得更加清晰。
附图说明
图1是说明结合本发明的举例计算机系统的方框图;
图2是说明结合本发明的图形层次结构的方框图;
图3是说明根据本发明一个方面所构成的视窗背景图形以及用于处理背景图形的相关元件的说明,例如,可通过传送背景图形来提供图形命令和其它数据;
图4是说明根据本发明一个方面所构成的确认视窗、画图视窗和相关画图图元的背景图形;
图5是说明根据本发明一个方面所构成的视窗类型、图标模型;
图6是说明根据本发明一个方面所构成各种其它图标模型的图标;
图7是说明根据本发明一个方面所构成视窗数据转换的图形;
图8A和8B是说明根据本发明一个方面所分别以几何尺度和非几何尺度所构成的视窗数据转换;
图9A至9C是根据本发明一个方面所构成表面视窗图标和其它视窗和元件的方框图;
图10A和10B是说明根据本发明一个方面所构成HWnd视窗图标的图形;
图11是说明根据本发明一个方面分层视窗图标的图形;
图12是说明根据本发明一个方面所构成图标模型的几何分类;
图13是说明根据本发明一个方面所构成PathGeometry结构;
图14是说明根据本发明一个方面所构成视窗的背景图形以及显示由图元所产生的举例图形的画图图元;
图15是说明根据本发明一个方面所构成图标模型的漆刷类型;
图16是说明根据本发明一个方面所产生以线性梯度漆刷图标数据的演示图形;
图17是说明根据本发明一个方面所产生以射线梯度漆刷图标数据的演示图形;
图18是说明根据本发明一个方面所产生具有各种延伸数值的演示图形;
图19是说明根据本发明一个方面所产生具有各种并列显示数值的演示图形;
图20是主要说明根据本发明一个方面所用于解释包括漆刷图标的视窗来产生图形逻辑的流程图;
图21是说明根据本发明一个方面所由视窗漆刷图标中数据产生的栅格和转换栅格;
图22是说明根据本发明一个方面与画出视窗的演示图形有关的栅格和转换栅格;
图23是说明根据本发明一个方面所演示的九个栅格漆刷图标;
图24是说明根据本发明一个方面的图标模型的转换类型。
具体实施方式
操作环境的例子
图1说明了可以实现本发明的适用的计算系统环境100的例子。计算系统环境100仅仅只是适用的计算环境的例子,而不是试图对本发明的使用范围和功能作出任何限制。计算环境100并不能解释成具有与举例操作环境100所说明的任何单个或组合元件有关的任何属性或需求。
本发明可以采用多种其它通用目的或特殊目的计算系统环境或架构的方式工作。适用于本发明的众所周知计算系统、环境,和/或架构的例子可包括,但并不限制于,通用计算机、服务计算机、掌上或膝上器件,平板器件、多处理器系统、基于微处理器的系统、机顶盒、可编程消费电器、网络PC、微计算器、大型计算机、以及包括任何上述系统或器件的分布计算环境,等等。
本发明所讨论的可以是计算机可执行指令的一般内容,例如,可由计算执行的程序模块。一般来说,程序模块可以包括例行程序、程序、图标、部件、数据结构、等等,这些都执行指定的任务或实施指定提取数据类型。本发明也可以分布计算环境来实现,在分布计算环境中,其任务是由通过通讯网络连接的远程处理器件来执行的。在分布计算环境中,程序模块可以放置在本地计算机和远程计算机的存储媒介中,该存储媒介可以包括存储器存储器件。
参照图1,用于实现本发明的举例系统包括以计算机110方式构成的普通通用计算装置。计算机110的部件可以包括,但并不限制于,处理单元120,系统存储器130,以及系统总线121,该系统总线将包括系统存储器的各种系统部件与处理单元120相耦合。系统总线121可以是几种类型的总线结构中的任意一种,这几种总线结构包括存储器总线和存储器控制器、外围设备总线,以及使用多种总线结构中的任意一种结构的局部总线。通过该例子,但并不限制于,这类结构包括工业标准结构(ISA)总线、微通道结构(MCA)总线、增强ISA(EISA)总线、视频电子标准协会(VESA)局部总线、加速图形端口(AGP)总线以及也称之为中间层总线的外围设备互连(PCI)总线。
计算机110一般可包括各种计算机可读媒介。计算机可读媒介可以是计算机110能够访问的任意有效媒介并包括易失的和非易失的、以及可移动的和非移动的媒介。例如,但不限于,计算机可读媒体可包括计算机存储媒介和通信媒介。计算机存储媒体包括诸如计算机可读指令、数据结构、程序模块或其它数据的信息存储的任意方法或技术所实现的易失和非易失的,可移动和非移动的媒介。计算机存储媒介包括,但并不限制于,RAM、ROM、EEPROM、闪存存储器或其它存储技术,CD-ROM、数字视频盘(DVD)或其它光盘存储、盒式磁带、磁带、磁盘存储或其它次存储器件,或任何其它能够用于存储所要求信息以及能够由计算机110存取的媒介。通讯媒介一般应用于计算机可读指令、数据结构、程序模块或其它用于调制数据信号(例如,载波或其它传输机制)的数据并包括任何信息传递媒介。术语“调制数据信号”是指具有可采用编码信号中信息的方式来设置或变化其一种或多种特性的信号。例如,但并不限制于,通讯媒介包括诸如有线网络或直接连接网络的有线媒介,和诸如声波、RF、红外的无线媒介以及其它无线媒介。上述的任意组合也应该包括在计算机可读媒介的范围内。
系统存储器130包括采用易失和/或非易失存储器方式的计算机存储媒介,例如只读存储器(ROM)131和随机存取存储器(RAM)132。基本输入/输出系统133(BIOS)包含着基本程序,这些程序可有助于计算机内部元件之间传递信息,例如在启动阶段,BIOS一般存储于ROM131。RAM132一般可包含数据和/或程序模块,它们可以是处理单元120即时存取和/或正在处理的内容。例如,但并不限制于,图1说明了操作系统134、应用程序135、其它程序模块136和程序数据137。
计算机110也可以包括其它可移动/不可移动的,易失/非易失计算存储媒介。这只是一个例子,图1说明了可以读或写不可移动、非易失磁媒介的硬盘驱动器141,可以读或写可移动、非易失磁媒介152的磁盘驱动器151,以及可以读或写可移动、非易失光盘(例如,CD ROM)156或其它光媒介的光盘驱动器155。其它可以应用于举例操作环境的移动/非移动、易失/非易失的计算机存储媒介包括,但并不限制于,盒式磁带、闪存卡、数字视频盘、数字视频带、固态RAM、固态ROM、等等。硬盘驱动器141一般可通过非移动存储器接口,例如,接口140,与系统总线121相连接,磁盘驱动器151和光盘驱动器155一般可通过移动存储器接口,例如,接口150,与系统总线121相连接。
上述所讨论和图1所说明的驱动器以及它们相关计算机存储媒介提供了计算机可读指令指令、数据结构、程序模块和用于计算机110的其它数据的存储。在图1中,例如,所说明的硬盘驱动器141用于存储操作系统144、应用程序145、其它程序模块146以及程序数据147。值得注意的是,这些部件可以是相同的或不同的操作系统134、应用程序135、其它程序模块136、以及程序数据137。操作系统144、应用程序145、其它程序模块146,以及程序数据147给出不同数量来说明它们以最小数量的不同拷贝。用户可以通过输入器件将命令和信息输入到计算机110,输入器件可以包括:写字板(电子数字化仪)164、麦克风163、键盘162和指示器161,通常称之为鼠标、光标跟踪球或触摸垫。其它输入器件(未显示)可以包括:操纵杆、游戏垫、卫星接受盘、扫描仪、等等。各种输入器件经常通过用户输入接口160连接处理单元120,其中用户输入接口连接着系统总线,也可以采用其它接口和系统总线来连接,例如,并行接口、游戏端口或者通用串行总线(USB)。监视器191或其它类型的显示器件也可以通过接口连接系统总线121,该接口可以是视频接口190。监视器191也可以与触摸屏193或类似的器件集成在一起,触摸屏193或类似的器件可以通过诸如触摸屏的接口192的接口将诸如手写入输入的数字输入至计算机系统110。值得注意的是,监视器和/或触摸屏可以物理连接着主机上,在主机中计算器件110合成在一起,例如,平板类个人计算机,其中,触摸屏193基本上是用于平板164的。此外,诸如计算装置110的计算机也可以包括其它外围输出装置,例如,扬声器195和打印机196,它们都可以采用输出外围接口194等等来连接。
计算机110可以工作于网络环境,在该网络环境中使用逻辑连接着一台或多台远程计算机,例如,远程计算机180。远程计算机180可以是个人计算机、服务器、路由器、网络PC、对等的器件或其它通用网络结点,并且一般可以包括许多或所有上述讨论的有关计算机110的元件,虽然在图1中只是说明了存储器存储器件181。在图1中所描述的逻辑连接包括局域网(LAN)171和广域网(WAN)173,并且也可以包括其它网络。这类网络环境是办公室中很普遍的,企事业范围内的计算机网络,企业内部网以及互联网。
在LAN网络环境中使用时,计算机110通过网络接口或适配器170与LAN171相连接。在WAN网络环境中使用时,计算机110一般包括调制解调器172或其它通过广域网173(例如,互联网)建立通讯的部件。调制解调器172可以有内置式或外置式,它通过用户输入接口160或其它适用的机制连接系统总线121。在网络环境中,与计算机110有关或其部分有关的程序模块可以存储于远程存储器存储器件中。例如,但并不限制于,图1说明了将远程应用程序185驻留于存储器件181。应该理解的是,所显示的网络连接仅仅是举例,也可以使用其它建立在计算机之间通讯连接的方法。
背景图形数据结构的接口
本发明的一个方面主要针对使程序代码,例如,应用程序或操作系统部件,将通讯画图指令和其它信息(例如,图像位图)传达到图形部件,以便于在系统显示图形输出。为了能达到这一点,本发明提供了一系列定义的功能和方法,例如,对图标模型采用应用程序接口(API)的方式,以便于程序能够采用数据结构、画图图元(命令),以及其它于图形有关的数据来组装背景图形。当需要是,背景图形产生能在显示屏上显示的图形。
图2说明了本发明所能实现的一般、分层的结构200。正如图2中所说明的,根据本发明的一个方面,程序代码202(例如,应用程序和操作系统部件或其它等等)都可以一种或多种不同的方式形成输出的图形数据,其中,采用的方式可包括:通过成像204设备,通过矢量图形元件206,和/或通过直接进入视窗应用程序接口(API)层212的功能/方法的调用。一般来说,成像设备204提供了程序代码202,它具有装载、编辑和存储图像(例如,位图)的机制。正如以下所讨论的,系统的其它部分也可以使用这些图像,也有方法可使用图元画图代码直接画出图像。矢量图形元件206提供了另一种画图的方法,该方法是与图标模型的保持是一致的(以下将讨论)。矢量图形元件206可以采用标识语言来创建,它用于元件/使用系统208和推荐系统210能对视窗API层212解释适当的调用。与元件/使用系统208和推荐系统210一起的矢量图形元件206在以上所提到的专利申请“适用于矢量图形的标识语言和图标模型”中作了讨论。
在一个实施例中,图形的层次结构200包括高层部分和动画引擎214,其中动画引擎包括或与高速缓存数据结构216有关。高速数据缓存结构216包括由根据所定义图标模型管理的层次排列的图标所组成的背景图形,正如以下所讨论的。一般来说,视窗API层212对高速缓存数据结构216提供了程序代码202(以及推荐系统210)和接口,并包括创建图标、打开和关闭图标以向图标提供数据、等等的能力。换句话说,高层部分和动画引擎214提供了统一规范的媒介API层212,开发者了可以通过该层来表述有关图形和显示该图形信息的意图,并提供下层平台足够的信息,使得该平台能够优化用于程序代码的硬件的使用。例如,下层平台可以响应高速缓存、资源导航和媒介集成。
在一个实施例中,高层部分和动画引擎214将指令流和可能的其它数据(例如,位图的指针)转发至快速的低层部分和动画引擎218。正如本文所使用的,术语“高层”和“低层”类似于在其它计算方案中所使用的那样,其中,一般来说,相对于高层元件软件元件越低,则该元件越接近于硬件。于是,例如,可以在低层部分和动画引擎218接受到发自高层部分和动画引擎214的图形信息,其中,该信息可用于向包括硬件222的图形子系统发送图形数据。
高层部分和动画引擎214可结合程序代码202创建背景图形,以表示由程序代码202所提供的图形背景。例如,需要画的各个项目可以采用画图指令来装载,系统能够在背景图形数据结构216中来缓存这些指令。正如以下所讨论的,可有许多不同的方法来定义该数据结构216,以及它所画的内容。此外,高层部分和动画引擎214与时钟和动画系统集成在一起,提供说明性(或者其它)动画控制(例如,动画间隔)和时钟的控制。值得注意的是,动画系统允许动画数值能基本上转发到系统的各个部分,包括,例如,在视窗API层212内的和在其它资源的任何部分内的元件适用层208。在元件和视窗层提供了时钟系统。
低层部分和动画引擎218管理着背景的合成、动画和演示,随后将背景提供给图形子系统222。低层引擎218合成用于多个应用背景的演示,并且采用演示元件来实现图形在屏幕上的真实演示。然而,值得注意的是,它可以在需要和/或方便的时候在较高层上产生部分演示。例如,在低层服务接受到来自多个应用请求的同时,在各个应用的基础上具体说明较高层,从而有可能通过图像机制204在较高层上进行时间消耗或应用的指定演示,以及将参考转发至低层的位图。
图3和图4分别显示了举例的背景图形300和400,包括称之为视窗的基本图标。一般来说,视窗包括向用户表示视窗表面的图标并且在显示表面上具有说明。正如图5所说明的,基本类视窗为其它视窗类提供了基本功能,即,视窗类500是视窗类(例如,501至506)起源的抽象基本类。
正如图3所说明的,上层(或根)视窗302与视窗管理器的图标304相连接,该图标也具有与窗口(HWnd)306或者类似单元的关系(例如,通过操纵),在这些单元中输出用于程序代码的图形数据。VisualManager 304上层视窗(和该视窗的子视窗)画在窗口306中进行管理。图6显示了VisualManager作为一组其它的图标620中的一个,它采用本文所讨论图形系统的图标模型。
为了能画上,视窗管理器304将背景图形处理(例如,传送或传输)成发报机308的流程,并向低层元件218(图2所示)提供图形指令和其它数据,用于它所对应的窗口306,例如,在美国专利申请序列号No.10/184,795,10/184,796和10/1845,775中所主要讨论的。背景图形的处理通常是由发报机308确定在相对于低层元件218和/或图形子系统222的刷新率要低的速率上。图3显示了层次排列在上层(根)视窗302以下的一些子视窗310-315,其中部分可表示成已经通过画图内容316,317(如表示它们时间属性的虚线框所显示的)分别与相关的指令表318和319组装起来,例如,包含了画图的图元和其它视窗。该视窗也可以包含其它适当的信息,正如在以下举例的视窗类型中所显示:
public abstract class Visual:VisualComponent{public Transform Transform{get;set;}public float Opacity{get;set;}public BlendMode BlendMode{get;set;}public Geometry Clip{get;set;}public bool Show{get;set;}public HitTestResult HitTest(Point point);public bool IsDescendant(Visual visual);public static Point TransformToDescendant(Visual reference,Visual descendant,Point point);public static Point TransformFromDescendant(Visual reference,Visual descendant,Point point);public Rect CalculateBounds();//Loose boundspublic Rect CalculateTightBounds();//public bool HitTestable{get;set;}public bool HitTestIgnoreChildren{get;set;}public bool HitTestFinal{get;set;}} |
从中可以看到,视窗是通过提供转换、剪辑、不透明和能够设置的可能的其它性能,和/或提供给定方法的阅读来提供服务的。此外,视窗具有控制它如何参与命中测试的标志,正如以下所讨论的。所示的性能可用于显示/隐藏视窗,例如,当假的时候视窗是看不到的,反之视窗是可见的。
转换是由转换性能所设定的,它定义了用于视窗子图形的坐标系统。在转换之前的坐标系统可称之为转换前的坐标系统,在转换之后的坐标系统可称之为转换后的坐标系统,即,采用转换的视窗等效于将采用转换结点的视窗作为父辈。图7主要提供了转换的例子,用于区别相对于视窗的转换前和转换后的坐标系统。为了能得到或设置视窗的转换,可以使用转换性能。
值得注意的是,坐标转换可以统一的方式应用于每一样东西,好像是在位图中。值得注意的是,这并不意味着该转换可以一直应用于位图,但所得到的演示内容同样受到转换的影响。例如,如果用户用园珠笔来画个一英寸宽的圆,随后在X方向上标为2,圆就会在左右方向上宽两英寸,而在上下方向上只宽一英寸。有时将此称之为合成或位图转换(相对于仅仅影响几何的笔划或几何尺寸)。图8A说明了尺寸的转换。在左边呈现了未转换的图像800,而在右边则呈现了采用不统一标度转换的图像802。图8B说明了标度的转换,在左边呈现了未转换的图像800,而在右边呈现了具有几何尺寸的转换的图像804。
与视窗的坐标转换有关,TransformToDescendant将点从参考视窗转换至子辈视窗。该点从参考视窗的转换后坐标空间转换到子辈视窗的转换后坐标空间。TransformFromDescendant转换将点从子辈视窗向父辈链的参考视窗转换。该点则从子辈视窗的转换后坐标空间转换到参考视窗的转换后坐标空间。CalculateBounds方法以转换后的坐标空间返回视窗内容的限制框。值得注意的是,可以有另一种API的模式,在该模式中可以有更多的特殊指标允许在坐标的转换过程中能解释视窗是如何转换的。例如,可以考虑也可以不考虑对参考和子辈视窗的转换。于是,在另一实施例中,就有四种选择,例如,坐标可以从转换前的空间转换到转换前的空间,从转换前的空间转换到转换后的空间,从转换后的空间转换到转换前的空间,以及从转换后的空间转换到转换后的空间。相同的概念应用于命中测试,例如,命中测试可以转换前或转换后的转换坐标空间开始,并且命中测试结果可能在转换前或转换后的坐标空间中。
剪辑性能设置(和获得)视窗的剪辑区域。任何几何(以下将参考图12来讨论几何的类型)都可以用作剪辑区域并可以应用于转换后的坐标空间中。在一个实施例中,剪辑区域的默认设置为零,即,没有剪辑,这可以看成从(-∞,-∞)到(+∞,+∞)无限大的剪辑矩形区域。
不透明性能获得/设置了视窗的不透明数值,使得视窗的内容可以根据不透明数值和所选择的混合模式在画图的表面混合。BlendMode性能可以用于设置(或获得)所使用的混合模式。例如,不透明(α)数值可以设置在0.0到1.0之间,与线性α混合设置成模式,例如,彩色=α×前景颜色+(1.0-α)×背景颜色)。其它服务,例如,特殊效果性能也可以包括在视窗中,即,模糊、单色,等等。
各种服务(包括:转换、不透明、剪辑)都可以压入或者弹出画图内容,并且压入/弹出操作可以相互嵌套,只要弹出调用能与压入调用相匹配。例如,PushTransform(...);PushOpacity(...);PopTransform(...)是无效的,因为在PopTransform调用之前,需要调用PopOpacity。
PushTransform方法压入了转换。所执行的后续画图操作是与压入转换有关的。PopTransform弹出了由相匹配的PushTransform调用所压入的转换:
void PushTransform(Transform transform);
void PushTransform(Matrix matrix);
void PopTransform();
类似的,PushOpacity方法压入了一个不透明数值。可采用指定的不透明数值在时间的表面上呈现出后续画图的操作,并随后组成一个背景。PopOpacity弹出由相匹配的PushOpacity调用所压入的不透明:
void PushOpacity(float opacity);
void PushOpacity(NumberAnimationBase opacity);
void PushOpacity();
PushClip方法压入了剪辑的几何结构。后续的画图操作都剪辑成几何结构。该剪辑可以应用于后期变换空间。PopClip弹出由相匹配PushClip调用所压入的剪辑区域:
void PushClip(Geometry clip);
void PushClip();
值得注意的是,压入的操作可以是随意嵌套的,只要弹出的操作与压入的操作能相匹配。例如,以下是有效的:
PushTransform(...);DrawLine(...);PushClip(...);DrawLine(...);PopClip();PushTransform(...);DrawRect(...);PopTransform();PopTransform(); |
在后期变换坐标的空间中进行命中测试,并且返回被命中测试视窗的标识符,例如,检测到画笔或鼠标点击时。界面的另一版本可以允许命中测试在与开始命中测试的视窗有关的预变换坐标空间开始。被命中的视窗以右至左、深度第一的次序返回。命中测试可以采用各种标志来控制,该标志包括HitTestable和HitTestFinal,HitTestable确定了视窗是目标可测试的(默认为真),而HitTestFinal确定在视窗被命中时停止命中测试,即,如果视窗被命中并且视窗的HitTestFinal的特性为真,则退出命中测试以及返回在该点所收集的结果(默认为假)。另一标志是HitTestIgnoreChildren,它确定了在对视窗进行命中测试时应该考虑视窗的子窗(默认为假)。
ProxyVisual是一旦进入背景图形可以增加的多个视窗。由于ProxyVisual所参考的任何视窗都可以从根出发的多个路径到达,阅读服务(TransformToDescendent,TransformFromDescendent和HitTest)都不能通过ProxyVisual工作。事实上,从任何视窗到视窗树的根只有一个规范的路径且该路径并不能包括任何ProxyVisuals。
正如图5所表示的那样,各种类型的视窗都可以在目标模式中定义,包括ContainerVisuals 501,DrawingVisuals 502,ValidationVisuals 503,SurfaceVisuals 504和HwndVisuals 505。下列的表格设置了DrawingVisual的第四种举例的方法:
public class DrawingVisual:Visual{public DrawingVisual();public IDrawingContext Open();public IDrawingContext Append();} |
DrawingVisuals是一个图形内容(例如,线条、文字、图像、等等)的容器。值得注意的是,有可能将视窗增加到DrawingVisuals中,但是在某些实施例中这是不允许的。DrawingVisuals 502包括打开(Open)的方法,该方法返回IdrawingContext,它可以用于组装DrawingVisual,例如,采用其它视窗和画些图元,正如以下所要讨论的那样。在一个实施例中,对于以下所讨论的各种原因,只可以在组装它的画图内容时才可打开DrawingVisual;换句话说,该DrawingVisual是不可变的,无论是将任何东西放入在其中(尽管程序代码可以代替视窗所指向的源目标)。在DrawingVisual组装了之后,DrawingVisual是采用封闭(Close)的方法封闭的,例如,在画图的内容中。值得注意的是,Open调用可以清除视窗的所有内容(子视窗),然而,在另一实施例中,提供了附加(Append)的方法,以附加另一视窗的方法来打开当前的视窗。换句话说,OpenForAppend调用类似于Open工作,除了DrawingVisual的当前内容不能在打开时清除。
以下是一个画图内容如何用于组装视窗的例子:
ContainerVisual cv1=new ContainerVisual();DrawingVisual dv1=new DrawingVisual();// Open a drawing context.The context// will automatically beclosed when// exiting the using block.This will also// replace any contents that might already// be in dv1.using(IDrawingContext dc=dv1.Open()){dc.DrawLine(new Pen(Brushes.Blue),new Point(...),new Point(...));}// Add dv1 to the child collection of cv1cv1.Children.Add(dv1);// Add another arbitrary visual to cv1cv1.Children.Add(someOtherVisual);// Create another DrawingVisualDrawingVisual dv2=new DrawingVisual();using(IDrawingContext dc=dv2.Open()){// This sets up a new coordinate system// where everything is twice as bigdv.PushTransform(new Scale(2.0,2.0));// This line is drawn in the new scaled// coordinate system.dc.DrawLine(new Pen(Brushes.Red),new Point(...),new Point(...));// This reverts to the original coordinate system.dv.PopTransform();dc.DrawLine(new Pen(Brushes.Green),new Point(...),new Point(...)); |
}// Add dv2 to the child collection of cv1;cv1.Children.Add(dv2); |
一般来说,ValidationVisual503在概念上类似于DrawingVisual,除了当系统要求它来填充以替代程序代码要组装它时来组装ValidationVisual。例如,正如在美国专利序列号No.10/185,775中所讨论的,高层结构和动画引擎214(图2)可以使背景图形数据无法(效)成为所需要的资源,例如,在部分背景图形是不可视时。例如,如果某些部分从显示、剪辑等等中滚出。如果以后又需要这些无效的背景图形数据,则程序代码202的调用将会调回重画(有效)背景图形的无效部分。为了能达到这个目的,一个典型的用途设想是将程序代码再分成ValidationVisual和替换成OnValidate的方法。当系统调用OnValidate方法时,画图内容就通过,而用于画图内容的程序重新组装ValidationVisual。
以下的例子显示了一个实施简单ValidationVisual的方法,例如,采用一种颜色来画条线。线条的颜色可以通过调用SetColor来改变。为了能强迫更新ValidationVisual,SetColor调用了Invalidate来迫使图形化的子系统重新有效ValidtionVisual:
public class MyValidationVisual:ValidationVisual{public override void OnValidate(IDrawingContext dc){dc.DrawLine(m_color,...);}public void SetColor(Color newColor){m_color=color;Invalidate();// Force a redraw of the ValidationVisual to// reflect the color change.}private Color m_color} |
这个例子显示了如何使用ValidtionVisual:
MyValidationVisual myVV=new MyValidationVisual();container.Children.Add(myVV);myVV.SetColor(new Color(...)); |
图4显示了一个举例的背景图形400,在该例中,ContainerVisuals和DrawingVisuals都是与背景图形相关的,并具有相关的数据,该数据采用画图元的形式,(例如,在对应的画图内容中)。ContainerVisuals可以相互嵌套在一起。ContainerVisual的子窗可以采用从VisualContainer的子窗特性中返回的VisualCollection来保持。在VisualCollection中的Visual的次序确定了其中Visual的呈现次序,即,从最低的索引到最高的索引从背后到前面(图板次序)来呈现视窗。例如,采用在容器视窗下表示红、绿和蓝矩形层次的三个画图视窗作为适当的参数,下列代码将会产生用于画图的三个矩形(编译在右下角),红色的矩形在背后,绿色的矩形在中间以及蓝色的矩形在前面:
VisualCollection vc=m_cv.Children;vc.Add(new DrawingVisual());vc.Add(new DrawingVisual());vc.Add(new DrawingVisual());for(int i=0;i<vc.Count;i++){DrawingVisual v=(DrawingVisual)(vc[i]);if(v!=null){v.Transform=Transform.CreateTranslation(i*20.0f,i*20f);IDrawingContext dc=v.Open();dc.DrawRectangle(new Brush(colors[i]),null,new Point2D(0,0),new Point2D(100.0f,100.0f));v.Close(dc);}} |
正如图5所表示的那样,另一类视窗目标是SurfaceVisual504。一般来说,正如图3中所表示的,SurfaceVisual目标315参考存储器的内表面(位图)322,它可以被程序代码202(图2)访问。客户程序代码202可以提供它自身的表面存储器或者它可以要求存储器定位于表面目标。
程序代码202具有一个选择,可用以打开SurfaceVisual并得到画图内容323,程序代码202能够将像素数据324以及相似内容写入画图内容或者直接将这些像素放置于表面。这在图3中由表面目标322、画图内容323(如表示其时间属性的虚线所示)和像素数据324之间的虚线表示。
程序代码202还具有一个选择,可用以产生表面视窗管理器330和与SurfaceVisula 315有关的视窗子图形。该选择在图3中以表面目标322和表面视窗管理器330之间的虚线表示。值得注意的是,视窗的子图形332也可以嵌套于其它表面视窗,正如图3所示。表面视窗管理器330(也可作为图6组620中的一类其它目标来显示)带走视窗子图形332来更新SurfaceVisual的位图322。此外,值得注意的是,该往返是由转发器308来安排的,以及为了效率可以调节这种安排,以控制如何能够经常更新该位图322。表面视窗管理器330并没有每一次和/或以相同的速率来往返视窗子图形322,从而顶层视窗管理器302使背景图形的其余部分走动。
对于表面,正如参照图9A至9C的进一步讨论,一般来说,当前的图形模式允许一组视窗构成表面,即时的模式将矢量和位图图元呈现在表面上,在桌面上或者在其它表面构成了表面,以及控制在表面列表中的该表面用于构成或者画出该表面。表面列表定义成物理(系统或视频)存储器的一个或多个表面(即,帧/缓冲器)的集合,物理(系统或视频)存储器用于存储视窗或图形画法的,或者两者的成份。表面列表中的一个表面可以设置为当前的背景缓冲器,在背景缓冲器中进行画图和构成,以及表面列表中的一个表面可以设置为当前主要的或前面缓冲器,它可以用于构成另一演示的目标。
可以多种方法使用表面。例如,图9A显示了所构成的表面。在图9A中,表面视窗管理器图标900连接着表面列表902,该表面列表作为视窗树904的呈现图标。在各个构成的过程中,视窗构成了表面列表的表面,该表面列表是目前用于表面列表的后面活动缓冲器。所构成的表面包括客户/高层结构引擎214(图2)适用于内部处理构成的设想而拥有的表面,低层构成引擎218所拥有的表面适用于客户不需要位而低层构成引擎218则需要该位用于构成另一呈现目标的表面的设想,或者,交叉处理的表面适用于客户需要访问表面位而低层构成引擎218也需要适用于其它结果工作的表面。
构成由附加在视窗管理器上的时序服务控制。时序服务的一个例子是可以用于以下实例的人工模式:
// create a manual timing service and attachavisual managerTimingService timingService=new ManualTimingService(visualManager);// composite the visual tree to the current back buffer of the surfacevisualManager.Render();foreach(Tick tick in timingService){// advance the back buffer to the next frame of the surfacesurfaceList.NextFrame();// advance the time of the visual treetimingService.Tick(tick);// composite the visual tree to the current back buffer of surfacevisualManager.Render();} |
另一种使用表面的方法是采用直接模式将内容呈现于表面。将表面列表附加在视窗上(表面视窗)使得直接模式可以将表面列表呈现在表内,该表面列表是当前用于表面列表的后面活动缓冲器。该呈现是通过获得来自表面视窗的画图内容并对其它内容执行画图的命令来实现的,正如以上所讨论的。值得注意的是,所获得的画图内容可锁定在表面,使得其它构成的操作不能对它作用。每一条画图命令都是直接执行的,并且矢量和其它表面可以画在(混合)在该表面上。然而,其它视窗不能画在该表面上,但是取代可以构成与视窗管理器有关的表面,正如先前所讨论的(即,图9A)。
// attach a surface list to a visualSurfaceVisual surfaceVisual=new SurfaceVisual(surfaceList);// enable immediate-mode rendering to(and lock)back buffersurfaceBaseDrawingContext dc=surfaceVisual.Open();// draw a line(immediately)to the current back buffer of thesurfacedc.DrawLine(pen,startPoint,endPoint);// unlock the surface-we’re done with immediate-mode renderingsurfaceVisual.Close(dc); |
表面的另一种应用是在另一呈现目标上构成表面。为了能达到这一目的,一旦表面列表附加到表面视窗之后,表面就可以作为视窗树的一个结点来附加,并且作为当前主要的或前面缓冲器的表面列表的表面就可以构成另一表面或桌面。在图9B中和以下的例子作了解释:
// attach a surface list to a visualSurfaceVisual surfaceVisual=new SurfaceVisual(surfaceList);// Add the surfaceVisual to a visual tree for compositing onto another// render targetrootVisual.Add(surfaceVisual); |
图9C表示了在线构成到/自表面,其中组合了上述的能力,使之构成表面列表的后面缓冲器表面以及构成表面列表的前面缓冲器表面(例如,构成桌面)的行为能同时发生。值得注意的是,要消除如断裂之类已知的不希望出现的视频现象,表面列表应该具有至少两个表面,前面和后面缓冲器表面。在图9C中所使用的表面可能是低层引擎218所拥有的表面,或者是使得低层引擎218的结构更好的交叉处理表面。
表面构成了一个独立的图标,正如在以下结构的例子中所阐述的:
public class Surface{// create and allocate a blank surface without initial datapublic Surface(int width,int height,int dpi,PixelFormat pixelFormat,SurfaceFlags flags)// create a surface using the supplied memorypublic Surface(int width,int height,int dpi,PixelFormat pixelFormat,IntPtr pixels,// managed memory for the surfaceInt stride)// create from a source(i.e.Clone)public Surface(Surface sourceSurface,SurfaceFlags flags)// Create from File or URLpublic Surface (String filename,SurfaceFlags flags)// Create from Streampublic Surface (System.IO.Stream stream,SurfaceFlags flags)// Create from HBITMAP(which can’t be selected into an HDC)public Surface(HBITMAP hbitmap,HPALETTE hPalette)// Create from HICONpublic Surface(HICON hicon)// read-only properties |
public Int Width{get;}public Int Height{get;}public Int Dpi{get;}public PixelFormat Format{get;}public int Stride{get;}public IntPtr Buffer{get;}} |
public class SurfaceList{// Create a list of blank surfaces(without initial data).public SurfaceList(int width,int height,int dpi,PixelFormat pixelFormat,int numSurfaces,SurfaceFlags flags)// Create a SurfaceList that uses the specified surfaces// All the surfaces must have identical properties(w,h,// dpi,etc).public SurfaceList(Surface[]surfaces)// change the front buffer to the first-in-line back bufferpublic Flip()//advance the back buffer to the next surfacepublic Next()public int FrontBufferIndex{get;set;}public int BackBufferIndex{get;set;}public Surface GetFrontBuffer()public Surface GetBackBuffer()public Surface GetSurface(int surfaceIndex)} |
一旦构成之后,表面和/或表面列表就可以附加到表面视窗目标或附加到视窗管理器目标上。
// Create a surface visualpublic SurfaceDrawingVisual(Surface surface)public SurfaceDrawingVisual(SurfaceList surfaceList)// Create a visual manager with a surface render targetpublic VisualManager(Surface surface)public VisualManager(SurfaceList surfaceList) |
此外,表面可以从解码器获得数据,和/或将它的数据发送至编码器,用于编写指定文件格式。表面也可以从效果接口接受或向效果接口发送数据。表面也可以从全组的支持表面格式类型中构成任何像素格式。然而,可以对指定的像素格式进行一些调整,即,如果指定像素格式是每一个像素小于32位,则格式就提升到每一个像素32位。只要位是原始格式的表面所要求的,则使用格式变换滤波器将表面复制到所要求的像素格式的缓冲器中。
再参照图5,还有另一中视窗是HwndVisual505,它定位在背景图形的Win32子Hwnd。更具体地说,遗留下的程序仍采用WM_PAINT方法(或者类似的方法)工作,它根据先前的图形技术来画出子HWnd(或类似的)。为了支持在新的图形处理模式中的这类程序,HwndVisual允许在背景图形中包含的Hwnd和作为父视窗移动的Hwnd可以重新配置,正如图10A所说明的那样。由于对现存Hwnd的限制,所以,当呈现时,子Hwnd只能在其它窗口的上面,并且不能像以上所讨论的其它视窗那样旋转或滚动。正如图10B所说明的那样,某些剪辑是可能的,图10B中的虚线表示了在与父视窗有关的相对移动的过程中,正在剪辑的HWnd显示矩形。
其它类型的视窗506也是可行的,并且本图标模型是可扩展的,允许形成其它的图标。例如,正如图11所说明的那样,分层的视窗1100能够是应用研发者控制通过多种视频流视窗的信息,从而提供相对于具有单一视频流视窗控制的良好粒度。值得注意的是,控制的粒度是可以采用在单一父视窗下分离子视窗(例如,三个)来实现的,然而,这需要程序代码能对多个视窗工作,这项工作比具有多层索引的单一层视窗的工作更加复杂。
例如,在图11中,在单一层的视窗中包含了背景数据、内容数据和边框数据,但可以通过层的数值相互分离成索引,例如,分别为:0、1或2。层是可以插入的,包括层叠在另一层上和/或,采用定义显示的所隐含的Z次序的层的次序(例如,如所示的从左到右)来删除。值得注意的是,为了安全,在分层视窗中的子内容和其它数据是不能计数的。
其它类型的视窗包括容器视窗和改变方向的子HWnd视窗,其中,将内容画成了位图,并且合并成了表面视窗。三维的视窗能够形成两维和三维世界之间的连接,例如,类似于摄像机的视角有可能采用具有进入三维世界的视角的两维的视窗。
许多资源的图标一旦创建之后是不可改变的,即,一旦图标创建之后,无论什么原因它们都不可改变,包括简化穿线问题,避免被其它的占用,以及简化与元件和API的相互作用。值得注意的是,这主要是简化了系统。然而,应该注意的是,具有这类图标可变的系统也是可行的,但是,该例子将需要处理从属性的图形。例如,虽然有可能具有这类图标可变的系统,但如果程序代码改变了设置在视窗上的夹子,该视窗就需要重新呈现,于是,这就需要提示/注册机制,例如,如果新的夹子是分配给视窗的,则视窗就采用该夹子来注册,用于提示(例如,夹子改变提示)。于是,在一个实施例中,为了简化的目的,资源是不可改变的。
这些资源图标可以采用结构来定义,这是创建图标最直接和常用的方法,或者使用共同生成器的图标,正如以下所讨论的。例如,为了能创建SolidColorBrush,(画刷图标是以下将要讨论的),常使用的结构为:
Brush MyBrush=new SolidColorBrush(Colors.Red);
用户也可以使用画刷分类的静态数量,来得到一组预定的颜色。
因为不变的图标是不可改变的,为了能有效地变化图标,用户需要创建新的图标并用新的图标来取代老的图标。为了能达到这一目的,系统中的资源图标都可以采用生成器的模型,其中采用生成器类型来创建不变的图标,这是一种可变的共同类型。用户所创建的不变图标反映在生成器上设置的参数,创建新的生成器用于该图标,并且从它的不变图标初始化。随后,用户可以根据需要来改变生成器。一旦完成了,用户就可以通过改变生成器来建立新的图标,并且可以重新使用它来创建其它不变的图标。值得注意的是,希望具有所设置性能的不变图标,并且该不变的图标是不可改变的,但是只可通过触发一些性能变化事件来替代。
于是,使用结构的替代来创建上述讨论的SolidColorBrush,SolidColorBrushBuilder可以用于:
SolidColorBrushBuilder MyBuilder=new
SolidColorBrushBuilder();
MyBuilder.Color=Colors.Red;
Brush MyBrush=MyBuilder.ToBrush();
大多数采用静态数值的图标也是可以采用动画图标的。例如,在DrawingContext上,存在着对DrawCircle的重叠,它采用PointAnimationBase作为圆圈的中心。这样,用户就可以在图元层上定义丰富的动画信息。对资源图标来说,除了基本数值之外,还存在着动画集。只要用户需要动画上述的例子,这些都是其组成部分,用户可以在建立画刷之前定义下列例子的线条:
MyBuilder.ColorAnimations.Add(new ColorAnimation(...));
值得注意的是,具有动画参数的图标仍旧是不可改变的,因为它的动画参数是静止的。然而,当处理背景图形(即,移动)时,就意味着随着时间变化动画的参数,得到动画的外形数据,它不是静止的。
正如以上所讨论的,视窗能够通过各种画图图元组装它们画图内容来画图,画图图元包括Geometry、ImageData和VideoData。此外,还存在着一组可整体分享的资源和分类。这些图元可以包括画笔、画刷、几何结构、变换和效果。IDrawingContext揭示了一组画图的操作,它可以用于组装DrawingVisual、ValidationVisual。ISurfaceDrawingContext,与Idrawing内容的基本接口,能够用于组装SurfaceVisual。换句话说,画图内容揭示了一组画图的操作,对各种画图操作来说,可以有两种方法,一种方法是采用常数作为变元,另一种方法是采用动画作为变元。
DrawLine方法采用指定的画笔从起点至终点画一条线段。
public void DrawLine(Pen pen,Point start,Point end);public void DrawLine(Pen pen,PointAnimationBase start,PointAnimationBase end); |
DrawRoundRectangle方法采用指定的画刷和画笔画一个封闭的矩形,画刷和画笔可以是不存在的。
public void DrawRoundedRectangle(Brush brush,Pen pen,Point topLeft,Size size,float radius);public void DrawRoundedRectangle(Brush brush,Pen pen,PointAnimationBase topLeft,SizeAnimationBase size,NumberAnimationBase radius);public void DrawRoundedRectangle(Brush brush,Pen pen,Point topLeft,Point bottomRight,float rx,float ry);public void DrawRoundedRectangle(Brush brush,Pen pen,PointAnimationBase topLeft,PointAnimationBase bottomRight, |
NumberAnimationBase radiusX,NumberAnimationBase radiusY); |
DrawGeometry方法采用指定的画刷和画笔画一条路径,画刷和画笔可以是不存在的。
public void DrawGeometry(Brush brush,Pen pen,Geometry geometry); |
DrawRectangle方法采用指定的画刷和画笔画一各矩形,画刷和画笔可以是不存在。
public void DrawRectangle(Brush brush,Pen pen,Point topLeft,Size size);public void DrawRectangle(Brush brush,Pen pen,PointAnimationBase topLeft,SizeAnimationBase size); |
DrawSurface方法画一个表面。
public void DrawSurface(Surface surface,Point topLeft,Size size,float opacity);public void DrawSurface(Surface image,PointAnimationBase topLeft,SizeAnimationBase size,NumberAnimationBase opacity); |
几何是一类定义矢量图形骨骼的类型,它没有笔划和填充。各个几何图标都是简单的形状(LineGeometry,EllipsGeometry,RectangleGeometry),复杂的单一形状(PathGeometry)或者这类具有所指定的组合操作(例如,合并,交叉,等等)形状的GeometryList的列表。这些图标形成了一类层次,正如图12所表示的。
正如图13所表示的,PathGeomtry是图形图标的集合。因此,每一个图形图标都由一个或多个子图标所组成,且这些子图标事实上定义了图形的形状。图形是几何的一个子部分,它定义了子集合。该部分集合是单个连接着两维部分图元的系列。该图形可以是具有指定区域的封闭形状,也可以只是定义的曲线而不具有封闭区域的连接系列部分。
PathGeometry的填充区域是由所包含的图形来定义的,该包含的图形具有它们所设置为真的填充特性,以及应用于FillMode来确定其封闭区域。值得注意的是,FillMode的列举指定了在Geometry中所包含的图形图标交叉区域是如何组合形成Geometry的最终区域。“Alternate”的规则采用在概念上从该点向任何方向的无限远画射线的方法,来确定该点是否在图的内部,随后检查形状部分通过射线的位置。从零开始计数,并且从左往右部分每通过一次射线就加1,以及从右往左路径部分每通过一次射线就减1,在计了交叉的数之后,如果结果为零,则该点就在路径的外部。反之,则是在内部。“winding”规则确定图上的点是否在内部,它采用在概念上从该点向任何方向的无限远画射线的方法并且对射线所通过的给定形状路径部分的数量进行计数。如果该数值是奇数,则该点在内部,反之如果是偶数,在该点就在外部。
正如图14所说明的那样,当画几何(例如,矩形)时,可以指定画刷或画笔,正如以下所讨论的。此外,画笔图标也可以具有画刷图标。画刷图标定义了如何来图形填充平面,并且也可具有画刷图标的类型层次。这在图14通过填充矩形1402来说明,该结果是视窗包括矩形并处理了画刷的指令和参数。
正如以下所讨论的,几类画刷(例如,梯度和九个栅格)可以它们的大小来排列。当需要使用时,这些画刷的尺寸可以从方框中获得,即,当将画刷的GradientUnits/DestinationUnits设置到ObjectBoundingBox时,就可以使用正在画的图元方框。如果将这些性能设置在UserSpaceOnUse,则可以使用坐标空间。
画笔的图标保持在画刷上,且对Width、LineJoin、LineCap、MiterLimit、DashArray和DashOffset具有相同的性能,正如在以下实例中所说明的:
public enum System.Windows.Media.PenLineCap{Butt,Round,Square}public enum System.Windows.Media.PenLineJoin{Miter,Round,Bevel}public class System.Windows.Media.Pen{// Constructorspublic Pen(Color color,float width};public Pen(Brush brush,float width);// Propertiespublic float[] DashArray{get;}public float DashOffset{get;}public FloatAnimationCollection DashoffsetAnimations{get;}public PenLineCap LineCap{get;}public PenLineJoin LineJoin{get;}public float MiterLimit{get;}public FloatAnimationCollection MiterLimitAnimations{get;}public float Opacity{get;}public FloatAnimationCollection OpacityAnimations{get;}public Brush Brush{get;}public float Width{get;}public FloatAnimationCollection WidthAnimations{get;}}public sealed class System.Windows.Media.PenBuilder:Builder{// Fields// Constructorspublic PenBuilder();public PenBuilder(Color color);public PenBuilder(Brush brush); |
public PenBuilder(Pen pen);// Propertiespublic float[] DashArray{get;set;}public float DashOffset{get;set;}public FloatAnimationCollectionBuilder DashOffsetAnimations{get;}public PenLineCap LineCap{get;set;}public PenLineJoin LineJoin{get;set;}public float MiterLimit{get;set;}public FloatAnimationCollectionBuilder MiterLimitAnimations{get;}public float Opacity{get;set;}public FloatAnimationCollectionBuilder OpacityAnimations{get;}public Brush Brush{get;set;}public float Width{get;set;}public FloatAnimationCollectionBuilder WidthAnimations{get;}// Methodspublic Pen ToPen();} |
正如以上所提及的,本发明的图形图标模型包括画刷图标模型,它主要提出了采用像素覆盖平面的概念。画刷类的例子以图15的层次来表示,在画刷基本类型下,可包括SolidColorBrush、GradientBrush、ImageBrush、VisualBrush(可以认为就是Visual)以及NineGridBrush。其中,GradientBrush包括LinearGradient和RadialGradient图标。正如以下所讨论的,画刷图标是不可改变的。
public abstract class System.Windows.Media.Brush{float Opacity{get;}FloatAnimationCollection OpacityAnimations{get;} |
} |
以下阐述了一例BrushBuilder的分类:
public abstract class System.Windows.Media.BrushBuilder:Builder{public virtual Brush ToBrush();public override sealed object CreateInstance();{return ToBrush();}float Opacity { get;set;}FloatAnimationCollectionBuilder OpacityAnimations{get;}} |
值得注意的是,画刷图标可以识别它们是如何与它们使用时的坐标系统有关的,以及它们是如何与它们所使用形状的方框有关的。总的说来,这类尺寸的信息可以从画刷所画的图标中推断出来的。更确切地说,许多画刷图标采用了指定一些它们参数的坐标系统。该坐标系统即可以定义成与采用画刷所应用形状的简单方框有关,也可以与在使用画刷时所活动的坐标空间有关。这些分别称为ObjectBoundingBox模式和UserSpaceOnUse模式。
public enum System.Windows.Media.BrushMappingMode{ObjectBoundingBox,UserSpaceOnUse,} |
SolidColorBrush图标可填充实线颜色的标识的平面。如果存在着颜色的α分量,它可以倍增的方法与画刷基本类型中所对应的不透明属性相组合。以下阐述了一例SolidColorBrush图标:
public sealed class System.Windows.Media.SolidColorBrush:Brush{// Constructorspublic SolidColorBrush();// initialize to blackpublic SolidColorBrush(Color color);public SolidColorBrush(System.Windows.Media.Animat ion.ColorComposercolorComposer);// Propertiespublic Color Color{get;}public IEnumerator ColorAnimations{get;}}public class System.Windows.Media.SolidColorBrushBuilder:BrushBuilder{// Constructorspublic SolidColorBrushBuilder();public SolidColorBrushBuilder(Color color);public SolidColorBrushBuilder(SolidColorBrush scp);// Propertiespublic Color Color{get;set;}public AnimationList ColorAnimations{get;}// Methodspublic virtual Brush ToBrush();} |
GradientBrush图标,或者简单的梯度,提供了梯度的填充,并且通过指定一组梯度光阑来画,这就指定了与某类级数一致的颜色。该梯度可以通过在γ2.2 RGB颜色空间的梯度光阑之间进行线性插入的方法来画;也可以很方便地采用其它或者其它颜色空间(HSB、CMYK、等等)来插入。两类梯度图标可包括线性和射线梯度。
一般来说,梯度可以由一系列梯度光阑所组成的。这些梯度光阑的每一个都包含着颜色(与包括的数值一起)和偏置。如果没有指定的梯度光阑,则画刷就以实线透明黑色来画,正如根本就没有所指定的画刷。如果只有一个所指定的梯度光阑,画刷就以一种所指定的颜色作为实线颜色来画。与其它资源类型一样,梯度光阑类型(如下表中的例子)是不可改变的。
public class System.Windows.Media.GradientStop{public GradientStop(Color color,float offset);public Color Color{get;}public AnimationEnumerator ColorAnimations{get;}public float Offset{get;}public AnimationEnumerator OffsetAnimations{get;}}public class System.Windows.Media.GradientStopBuilder:Builder{public GradientStopBuilder();public GradientStopBuilder(Color color,float offset);public Color Color{get;set;}public AnimationList ColorAnimations{get;}public float Offset{get;set;}public AnimationList OffsetAnimations{get;}public GradientStop ToGradientStop();} |
也存在着集合类型,正如以下例子中所阐述的:
public class System.Windows.Media.GradientStopCollection:ICollection{public GradientStopCollection();// empty listpublic GradientStopCollection(GradientStop[] GradientStops);public GradientStopCollection(ICollection c);// IEnumerablepublic IEnumerator GetEnumerator();// ICollectionpublic void CopyTo(Array array,int index);public bool ICollection.IsSynchronized{get{return false;}}public int Count{get;}public object ICollection.SyncRoot{get;}// Extra functionspublic GradientStop this[int index]{get;}public bool Contains(GradientStop value);public int IndexOf(GradientStop value);// returns first onepublic int IndexOf(GradientStop value,intstartIndex);public int IndexOf(GradientStop value,intstartIndex,int count);public int LastIndexOf(GradientStop value);public int LastIndexOf(GradientStop value,int startIndex);public int LastIndexOf(GradientStop value,int startIndex,int count);public GradientStopCollection GetRange(intindex,intcount);}public class System.Windows.Media.GradientStopCollectionBuilder:Builder,IList{public GradientStopCollectionBuilder();public GradientStopCollectionBuilder(GradientStop [] GradientStops);public GradientStopCollectionBuilder(ICollection c);public GradientStopCollectionBuilder(GradientStopCollectionGradientStops);// IEnumerablepublic IEnumerator GetEnumerator();// ICollectionpublic void CopyTo(Array array,intindex);public bool ICollection.IsSynchronized{get{return false;}}public int Count{get;}public object ICollection.SyncRoot{get;}// IListpublic bool IsFixedSize{get{return false;}}public bool IsReadOnly{get{return false;}}public object IList.this[int index]{get;set;}public int IList.Add(object value);public void Clear();public bool IList.Contains(object value);public int IList.IndexOf(objectvalue);// returns first onepublic void IList.Insert(int index,object value);public void IList.Remove(object value);// removes first onepublic void RemoveAt(int index);// Extra functionspublic GradientStop this[int index]{get;set;}public int Add(GradientStop value); |
public bool Contains(GradientStop value);public int IndexOf(GradientStop value);// returnsfirst onepublic int IndexOf(GradientStop value,int startIndex);public int IndexOf(GradientStop value,int startIndex,int count);public int LastIndexOf(GradientStop value);public int LastIndexOf(GradientStop value,int startIndex);public int LastIndexOf(GradientStop value,int startIndex,int count);public void Insert(int index,GradientStop value);public void Remove(GradientStop value);// removes first onepublic void AddRange(ICollection c);public voidInsertRange(int index,ICollection c);public void RemoveRange(int index,int count);public void SetRange(int index,ICollection c);public GradientStopCollectionBuilder GetRange(int index,int count);// Capacity is a hint.It will throw an exception if it is set lessthan Count.public int Capacity{get;set;}// Builder overloadspublic override object Build();public override void ResetBuilder();public override void SetBuilder(Object example);public GradientStopCollection ToGradientStopCollection();} |
正如下表中所说明的那样,GradientSpreadMethod指定了梯度应该如何来画指定矢量或空间的外部。着可有三个数值,包括:衬垫,在衬垫中边缘的颜色(第一和最后)可用于填充其余的空间;反射,在反射中。以相反的次序重复在放置光阑以填充空间;以及重复,在重复中,重复光阑直至空间被填满:
public enum System.Windows.Media.GradientSpreadMethod{Pad,Reflect,Repeat} |
图16显示了一例GradientSpreadMethod。各个形状都具有从白到灰白色的线性梯度。实线表示了梯度的矢量。
LinearGradient指定了沿着矢量的线性梯度画刷。各个光阑都指定了沿着该矢量的颜色光阑。在下列表格中显示了一个实例。
public class System.Windows.Media.LinearGradient:GradientBrush{// Sets up a gradient with two colors and a gradient vector// specified to fill the object the gradient is applied to.// This implies ObjectBoundingBox for the GradientUnits// propertypublic LinearGradient(Color color1,Color color2,float angle);public BrushMappingMode GradientUnits{get;}public Transform GradientTransform{get;}public GradientSpreadMethod SpreadMethod{get; }// Gradient Vectorpublic Point VectorStart{get;}public PointAnimationCollection VectorStartAnimations{get;}public Point VectorEnd{get;}public PointAnimationCollection VectorEndAnimations{get;}//Gradient Stopspublic GradientStopCollection GradientStops{get;}}public class System.Window.Media.LinearGradientBuilder:GradientBrushBuilder{public LinearGradientBuilder();public LinearGradientBuilder(Color color1,Color color2,float angle);public LinearGradientBuilder(LinearGradient lg);// GradientUnits:Default is ObjectBoundingBoxpublic BrushMappingMode GradientUnits{get;set;}// GradientTransform:Default is identitypublic Transform GradientTransform{get;set;}// SpreadMethod:Default is Padpublic GradientSpreadMethod SpreadMethod{get;set;}// Gradient Vector// Default vector is(0,0)-(1,0)public Point VectorStart{get;set;}public PointAnimationCollectionBuilder VectorStartAnimations{get;set;}public Point VectorEnd{get;set;}public PointAnimationCollectionBuilder VectorEndAnimations{get;set;} |
// Gradient Stopspublic void AddStop(Color color,float offset);public GradientStopCollectionBuilder GradientStops{get;set;}} |
RadialGradient在程序模型上类似于线性梯度。然而,现行线性梯度具有定义梯度矢量的起点和终点,而射线梯度具有沿着定义梯度行为焦点的圆圈。该圆圈可以定义梯度的终点,即,在1.0的梯度光阑定义了圆圈的颜色。焦点定义了梯度的中心。在0.0的梯度光阑定义了在焦点的颜色。
图17显示了从白到灰白色的射线梯度。外部圆圈表示梯度圆圈,而点则标注了焦点。该举例的梯度具有它设置衬垫的SpeadMethod:
public class System.Windows.Media.RadialGradient:GradientBrush{// Sets up a gradient with two colors.// This implies ObjectBoundingBox for the GradientUnits// property along with a center at(0.5,0.5)// a radius of 0.5 and a focal point at(0.5,0.5)public RadialGradient(Color color1,Color color2 );public BrushMappingMode GradientUnits{get;}public Transform GradientTransform{get;}public GradientSpreadMethod SpreadMethod{get;}//Gradient definitionpublic Point CircleCenter{get;}public PointAnimationCollection CircleCenterAnimations{get;}public float CircleRadius{get;}public FloatAnimationCollection CircleRadiusAnimations{get;}public Point Focus{get;}public PointAnimationCollection FocusAnimations{get;}// Gradient Stopspublic GradientStopCollection GradientStops{get;}} |
public class System.Windows.Media.RadialGradientBuilder:GradientBrushBuilder{public RadialGradientBuilder();public RadialGradient(Color color1,Color color2);public RadialGradientBuilder(RadialGradient rg);// GradientUnits:Default is ObjectBoundingBoxpub1ic BrushMappingMode GradientUnits(get;set;}// GradientTransform:Default is identitypublic Transform GradientTransform{get;set;}// SpreadMethod:Default is Padpublic GradientSpreadMethod SpreadMethod{get;set;}// Gradient definitionpublic Point CircleCenter{get;set;}// Default:(0.5,0.5)public PointAnimationCollectionBuilder CircleCenterAnimations{get;set;}public float CircleRadius{get;set;}// Default:0.5public FloatAnimationCollectionBuilder CircleRadiusAnimations{get;et;}public Point Focus{get;set;} // Default:(0.5,0.5)public PointAnimationCollectionBuilder FocusAnimations{get;set;}// Gradient Stopspublic void AddStop(Color color,float offset);public GradientStopCollectionBuilder GradientStops{get;set;}} |
图15所表示的另一画刷图标是VisualBrush图标。从概念上来说,VisualBrush提供了一种采用重复和平铺方式来填充的视窗画法。图14采用参照视窗(和任何子视窗)的视窗画刷来表示该方法,其中,参照的视窗指定为单一圆圈形状1420,采用该圆圈来填充矩形1422。于是,VisualBrush图标可以参照视窗来定义该画刷是如何画的,它介绍了一类视窗的多种用途。以这样的方法,程序可以使用任意的图形“元文件”采用画刷和画笔来填充区域。由于是一种可以用于存储和使用任意图形的压缩形式,所以它可以作为资源来使用。以下阐述了一例VisualBrush图标。
public class System.Windows.Media.VisualBrush:Brush{public VisualBrush(Visual v);public BrushMappingMode DestinationUnits{get;}public BrushMappingMode ContentUnits{get;}public Transform Transform{get;}public Rect ViewBox{get;}public Stretch Stretch{get;}public HorizontalAlign HorizontalAlign{get;}public VerticalAlign VerticalAlign{ get;}public Point Origin{get;}public PointAnimationCollection OriginAnimations{get;}public Size Size{get;}public SizeAnimationCollection SizeAnimations{get;}// Visualpublic Visual Visual{get;}}public class System.Windows.Media.VisualBrushBuilder:BrushBuilder{public VisualBrushBuilder();public VisualBrushBuilder(Visual v);public VisualBrushBuilder(VisualBrush vb);// DestinationUnits:Default is ObjectBoundingBoxpublic BrushMappingMode DestinationUnits{get;set;}// ContentUnits:Default is ObjectBoundingBoxpublic BrushMappingMode ContentUnits{get;set;}// Transform:Default is Identitypublic Transform Transform{get;set;}//ViewBox:Default is(0,0,0,0)--unset and ignoredpublic Rect ViewBox{get;set;}// Stretch:Default is None--and ignored// because the ViewBox is not setpublic Stretch Stretch{get;set;}// HorizontalAlign:Default is Center and ignoredpublic HorizontalAlign HorizontalAlign{get;set;}// VerticalAlign:Default is Center and ignoredpublic VerticalAlign VerticalAlign{get;set;}// Origin:Default is(0,0)public Point Origin{get;set;}public PointAnimationCollectionBuilder OriginAnimations{get;set;}// Size:Defaultis(1,1)public Size Size{get;set;}public SizeAnimationCollectionBuilder SizeAnimations{get;set;}// Visual:Default is null--nothing drawnpublic Visual Visual{get;set;}} |
VisualBrush的内容没有严格的边界,并且有效讨论了无限的平面。这些内容存在于它们各自的坐标空间,且采用VisualBrush填充的该空间是在时间应用时的局部空间。内容空间可根据ViewBox、ViewPort、Alignments和Stretch的性能映射到局部空间。ViewBox指定在内容空间中,并且该矩形映射到ViewPort(正如通过原点和尺寸性能来指定)矩形。
ViewPort定义了最终画的内容的位置,创建该画刷的基本构件。如果DestinationUnits的数值为UesrSaceOnUse,则原点和尺寸的性能就可以在应用时的局部空间中考虑。如果取代DestinationUnits的数值为ObjectBoundingBox,则原点和尺寸的性能就可以在坐标空间中考虑,其中,0,0是正在画的图标方框的左上角,而1,1是同样的方框的右下角。例如,所画的被填充RectangleGeometry能够从100,100到200,200。在该实例中,如果DestinationUnits为UesrSpaceOnUse,则100,100的原点和100,100的尺寸都可以考虑成整个区域。如果DestinationUnits为ObjectBoundingBox,则0,0原点和1,1的尺寸都可以考虑成整个区域。如果尺寸是空的,则该画刷呈现出没有任何东西。
ViewBox定义在内容空间中。该矩形可以转换以填入到由Alignment性能和Stretch性能所确定的ViewPort中。如果Stretch不存在,则就没有缩放的比例应用于内容。如果填了Stretch,就将ViewBox的尺寸在X和Y的方向上调整到和ViewPort相同的尺寸。如果Stretch是Uniform或者是UniformToFill,则逻辑相似,但X和Y的尺寸是缩放均匀的,保留内容的长宽比。如果Stretch是Uniform,则ViewBox的尺寸就必须大于等于ViewPort的限制尺寸。如果Stretch是UniformToFill,则ViewBox的尺寸就必须小于等于ViewPort的限制尺寸。换句话说,Uniform和UniformToFill都保持了长宽比,但Uniform则确保整个ViewBox在ViewPort之中(潜在地保留了部分ViewBox未覆盖的ViewPort),而UniformToFill则确保整个ViewPort被ViewBox所填充(潜在地引起了部分ViewBox在ViewPort的外部)。如果ViewBox是空的,则就不应用Stretch。值得注意的是,也可能发生对准,并且它将定位“点”ViewBox。
图18提供了采用各种扩展设置的图形演示的单一基本构件1800的表示,它包括,当扩展设置为“none”时的基本构件800。基本构件1802是在扩展设置为“Uniform”即时的表示,基本构件1804是在扩展设置为“UniformToFill”时的表示,以及基本构件1806是在扩展设置为“Fill”时的表示。
一旦ViewPort(基于DestinationUnits)被确认以及ViewBox的尺寸(基于Stretch)被确认之后,ViewBox就需要定位在ViewPort之中。如果ViewBox的尺寸是与ViewPort的尺寸相同的(如果Stretch为“Fill”或者如果正出现其它三个扩展设置中的一个数值),则ViewBox就定位在和ViewPort相同的原点上。反之,就考虑HorizontalAlignment和VerticalAlignment。根据这些性能,ViewBox在X和Y尺寸上对准。如果HorizontalAlignment在左面,则ViewBox的左边缘就对准ViewPort的左边缘。如果是在中心的,则ViewBox的中心就对准ViewPort的中心。如果是在右面的,则右边缘将对齐。对Y尺寸也重复该项处理。
如果ViewBox为(0,0,0,0),就认为没有设置,从而就考虑ContentUnits。如果ContentUnits为UserSpaceOnUse,就没有产生缩放的比例和偏置,并且内容就画入没有变换的ViewPort。如果ContentUnits是ObjectBoundingBox,则内容的原点就对准ViewPort的原点,并且内容可以采用图标方框的宽度和高度来调整。
当采用VisualBrush填充空间时,内容可以映射到上述的ViewBox中,并且可剪辑成ViewPort。这就形成填充的基本构件,并且空间的其余部分可以根据画刷的TileMode来填充。最后,如果设置,则可以应用画刷的变换-它在所有的其它映射、缩放,和偏置等等之后发生。
TileMode的举例可应用于讨论是否和如何采用画刷来填充。画刷可以是基本构件的,且具有所定义的基本构件的矩形,该基本构件具有在被填充空间中的基本位置。空间的其余部分可以根据TileMode的数值来填充。图19提供了具有各种TileMode设置的举例图形的说明,其中包括“None”1900,“Tile”1902,“FlipX”1904,“FlipY”1906以及“FlipXY”1908。在各个举例图形中的最左上的基本构件是由基本构件所组成的。
图20表示了产生该画刷像素的过程。值得注意的是,在图20中所讨论的逻辑只是实现该逻辑的一种可能的方法,并且应该理解到其它方法,包括更加有效的方法,是更加方便的。例如,有可能处理数据的更加有效的方法,例如,对每次重复的就不再采用所花的基本构件和缓存的内容来画。然而,图20提供了简单的描述。
一般来说,每次画模型的内容都要创建新的坐标系统。每次重复的原点和偏置都是由Origin和Size的性能所指定的,正如通过DestinationUnits和Transform的性能来滤除。
坐标帧是根据DestinationUnits的性能来设置的。为了能达到这一目的,如果在步骤2000,DestinationUnits的性能为UserSpaceOnUse,则通过步骤2002,画刷使用时的当前坐标帧就是起始坐标帧。如果在步骤2004中其性能是ObjectBoundingBox,则使用画刷所应用的几何方框,正如步骤2004所说明的。要创建新的坐标帧,使得方框的左上角映射成(0,0)而方框的左下角映射成(1,1)。无论在哪一种情况下,在步骤2006,Transform性能应用于该坐标系统,这就基本定义了栅格。
图21说明了将VisualBrush Grid定义成VisualBrush中的基本构件。第一个圆圈是简单的栅格,而第二个具有在X方向上为47倾斜的变换。
在步骤2008中,视窗画成栅格的各个单元,正如图22所说明的,其中视窗画成了合适的数据。如果在步骤2010中,有指定的ViewBox,则通过步骤2012,Visual就填充到由ViewBox、Stretch、HorizontalAlign和VerticalAlign属性所指定的各个栅格单元中。DestinationUnits和Transform的性能可应用校正变换,使得视窗的线条在栅格方框上面。
如果没有所指定的ViewBox,则在步骤2014就要创建应用画图内容的新的坐标系统。
设置坐标帧,使得它的原点处于正在画的特定栅格单元的原点上。
在步骤2018,可根据Size的性能来应用剪辑,使得它的基本构件不会画在单元方框的外部。可以根据DestinationUnits的性能适当地改变Origin和Size。
随后,根据SourceUnites的性能来修改坐标系统。为了能达到这一目的,如果在步骤2020中SourceUnites的性能为ObjectBoundingBox,则在步骤2026进行适当的缩放比例的变换,反之为UserSpaceOnUse,则就不进行新的变换。在步骤2024中应用Transform的性能,并在步骤2026中画内容。
值得注意的是,如果任何部分的尺寸都是零,就不画任何东西,如果Stretch为“None”,即设置ViewBox的变换,使得新坐标系统中的一个单元等于旧的坐标系统中的一个单元。根据对准的属性和ViewBox的尺寸,变换基本上变成了偏置。正如在步骤2010和2012中所讨论的那样,只有在存在着指定的ViewBox时才能应用扩展和对准的性能。ViewBox指定了内容的新坐标系统,并且扩展有助于指定这些内容如何映射到ViewBox中。对准选择所对准的是ViewBox,而不是内容。于是,例如,如果可视方框(ViewBox)设置在“00 1010”并在-10,-10的位置上画了一些内容以及对准着左上角,则该内容将被剪辑出去。
再参照图15,图像画刷可以被认为是特殊类VisualBrush。虽然程序是可以创建视窗的,将图像贴到视窗中和将其附加于视窗,所以完成该项工作的API就显得十分麻烦。由于不需要内容坐标帧,所以就不再应用ViewBox和ContentUnits性能部分。
public class System.Windows.Media.ImageBrush:Brush{public ImageBrush(ImageData image);public BrushMappingMode DestinationUnits{get;}public Transform Transform{get;}public Stretch Stretch{get;}public HorizontalAlign HorizontalAlign{get;}public VerticalAlign VerticalAlign{get;}public Point Origin{get;}public PointAnimationCollection OriginAnimations{get;}public Size Size{get;}public SizeAnimationCollection SizeAnimations{get;}public ImageData ImageData{get;}}public class System.Windows.Media.ImageBrushBuilder:BrushBuilder{public ImageBrushBuilder();public ImageBrushBuilder(ImageData image);public ImageBrushBuilder(ImageBrush ib);// Dest inationUnits:Default is ObjectBoundingBoxpublic BrushMappingMode DestinationUnits{get;set;}// Transform:Default is identitypublic Transform Transform{get;set;}// Stretch:Default is None |
public Stretch Stretch{get;set;}// HorizontalAlign:Default is Centerpublic HorizontalAlign HorizontalAlign{get;set;}// VerticalAlign:Default is Centerpublic VerticalAlign VerticalAlign{get;set;}// Origin:Default is(0,0)public Point Origin{get;set;}public PointAnimationCollectionBuilder OriginAnimations{get;set;}// Size:Default is(1,1)public Size Size{get;set;}public SizeAnimationCollectionBuilder SizeAnimations{get;set;}// ImageData:Default is null--nothing drawnpublic ImageData ImageData{get;set;}} |
NineGridBrush非常类似于ImageBrush,除了图像是基于尺寸来倾斜的。从根本上来说,NineGridBrush可以认为是一种用户类扩展,在该条件下扩展了图像的某些部分,而其它部分(例如,边框)就没有得到扩展。于是,在ImageBrush中的图像尺寸会产生简单的缩放比例,而NineGridBrush将对所要求的尺寸产生非均匀的缩放比例。非缩放区域的单元是应用画刷时的用户单元,这就意味着ContentUnitsrg(如果存在于NineGridBrush)将会设置UserUnitsOnUse。画刷的变换性能可以有效地使用。值得注意的是,从图像的边缘来计数边框的数量。
例如,图23表示了九个光阑图像,它是采用四类区域从第一例子2302放大至第二例子2304的。正如图23所示,为了保持相同的边框,标示为“a”的区域水平扩展,标示为“b”的区域就垂直扩展,标示为“c”的区域就水平和垂直扩展,以及标示为“d”的区域在尺寸上就没有变化。
public class System.Windows.Media.NineGridBrush:Brush{public NineGridBrush(ImageData image,int LeftBorder,int RightBorder,int TopBorder,int BottomBorder);public BrushMappingMode DestinationUnits{get;}public Transform Transform{get;}public Point Origin{get;}public PointAnimationCollection OriginAnimations{get;}public Size Size{get;}public SizeAnimationCollection SizeAnimations{get;}public int LeftBorder{get;}public int RightBorder{get;}public int TopBorder{get;}public int BottomBorder{get;}public ImageData ImageData{get;}}public class System.Window.Media.NineGridBrushBuilder:BrushBuilder{public NineGridBrushBuilder();public NineGridBrushBuilder(ImageData image,int LeftBorder,int RightBorder,int TopBorder,int BottomBorder);public NineGridBrushBuilder(NineGridBrush ngb);// DestinationUnits:Default is ObjectBoundingBoxpublic BrushMappingMode DestinationUnits{get;set;}// Transform:Default is identitypublic Transform Transform{get;set;}// Origin:Default is(0,0)public Point Origin{get;set;}public PointAnimationCollectionBuilder OriginAnimations{get;set;}// Size:Default is(1,1)public Size Size{get;set;}public SizeAnimationCollectionBuilder SizeAnimations{get;set;}// *Border:default to 0public int LeftBorder{get;set;}public int RightBorder{get;set;}public int TopBorder{get;set;}public int BottomBorder{get;set;}// ImageData:Default is null--nothing drawnpublic ImageData ImageData{get;set;}} |
正如以上所主要讨论的那样,本发明图形图标的模型包括了Transform图标模型,该模型包括了在Transform的基本模型下,以图24的层次结构表示的变换类型。这些组成变换的不同类型的分量可以包括TransformList、TranslateTransform、RotateTransform、ScaleTransform、SkewTransform以及MatrixTransform。各自的性能都可以是动画的,例如,程序开发者可以动画RotateTransform的角度性能。
两维计算的矩阵可以表示为3×3的矩阵。对于所需的变换来说,只需要六个数值来替代整个3×3的矩阵。这些的名称和定义如下所示:
当矩阵是关于点的多项式时,它可以将点从新的坐标系统变换到原先的坐标系统。
该变换可以嵌套在任何层次中。即时采用新的变换时,它与当前的变换矩阵上对它作后放大是相同的:
在API中的大多数位置上是不能直接采用矩阵的,但是可以使用Transform类型来替代,它可以支持动画。
public struct System.Windows.Media.Matrix{// Construction and settingpublic Matrix();// defaults to identitypublic Matrix(double m00,double m01,double m10,double m11,double m20,double m21);// Identitypublic static readonly Matrix Identity;public void SetIdentity();public bool IsIdentity{get;}public static Matrix operator*(Matrix matrixl,Matrix matrix2);public static Point operator*(Matrix matrix,Point point);// These function reinitialize the current matrix with// the specified transform matrix.public void SetTranslation(double dx,double dy);public void SetTranslation(Size offset);public void SetRotation(double angle);// degreespublic void SetRotation(double angle,Point center);// degreespublic void SetRotationRadians(double angle);public void SetRotationRadians(double angle,Point center);public void SetScaling(double sx,double sy);public void SetScaling(double sx,double sy,Point center);public void SetSkewX(double angle);// degreespublic void SetSkewY(double angle);// degreespublic void SetSkewXRadians(double angle);public void SetSkewYRadians(double angle);// These function post-multiply the current matrix// with the specified transform |
public void ApplyTranslation(double dx,double dy);public void ApplyTranslation(Size offApply);public void ApplyRotation(double angle);// degreespublic void ApplyRotation(double angle,Point center);//degreespublic void ApplyRotationRadian(double angle);public void ApplyRotationRadian(double angle,Point center);public void ApplyScaling(double sx,double sy);public void ApplyScaling(double sx,double sy,Point center);public void ApplySkewX(double angle);// degreespublic void ApplySkewY(double angle);// degreespublic void ApplySkewXRadians(double angle);public void ApplySkewYRadians(double angle);public void ApplyMatrix(Matrix matrix);// Inversion stuffpublic double Determinant{get;}public bool IsInvertible get;}public void Invert();// Throws ArgumentExceptionif!IsInvertablepublic static Matrix Invert(Matrix matrix);// Individual memberspublic double M00{get;set;}public double M01{get;set;}public double M10{get;set;}public double M11{get;set;}public double M20{get;set;}public double M21{get;set;}}; |
结论
正如以上详细讨论中所理解的那样,本发明提供了系统、方法和图标模型,使得程序代码可以具有与背景图形相互连接的能力。该系统、方法和图标模型都可以直接使用,并具有功能强大、使用灵活和扩展方便等特性。
虽然本发明容易接受各种改进和替代结构,但在附图中显示了上述说明的实施例并且详细讨论了上述实施例。然而,应该理解的是,并不试图将本发明限制于所披露的指定形式中,恰恰相反,本发明将覆盖在本发明的精神和范围内的所有改进、替代结构以及等效内容。
Claims (78)
1.在计算的环境中,一种方法包括:
以定义的界面来接受创建视窗的请求,该视窗包含着背景图形中的图形信息,并且响应之后创建视窗;
提供适用于视窗的画图内容;
保持与视窗有关的数据,以及通过画图内容所接受到的数据;以及,
处理背景图形,该背景图形包括向图形子系统提供图形数据的视窗。
2.如权利要求1所述方法,其特征在于,所提供的画图内容包括接受到的打开视窗的请求并且在响应之后向画图内容提供参考。
3.如权利要求1所述方法,其特征在于,在视窗中所保持的数据包括保持至少一种通过画图内容所接受到的画图图元。
4.如权利要求1所述方法,还包括:接受关闭画图内容的请求并且在响应之后关闭画图的内容。
5.如权利要求1所述方法,其特征在于,视窗包括程序代码访问的画图视窗。
6.如权利要求1所述方法,其特征在于,视窗包括程序代码访问的有效视窗,并且还包括无效的视窗,和程序代码与有效视窗相互通讯的数据。
7.如权利要求1所述方法,其特征在于,视窗包括表面视窗,并且其中,在有关视窗中保持的数据包括像素数据。
8.如权利要求1所述方法,其特征在于,视窗包括表面视窗,并且还包括表面视窗管理器,后者将表面视窗与通过向表面视窗传递子图以提供图像的至少一个其它视窗的子图相关联。
9.如权利要求1所述方法,其特征在于,有关视窗中所保持的数据包括接受到的至少一个通过画图内容的画图图元。
10.如权利要求1所述方法,其特征在于,所接受的至少一个画图图元包括接受到的图像数据图元。
11.如权利要求1所述方法,其特征在于,所接受的至少一个画图图元包括接受到的视频数据图元。
12.如权利要求1所述方法,其特征在于,所接受的至少一个画图图元包括接受到的几何图元。
13.如权利要求12所述方法,其特征在于,所接受的几何图元包括所接受到的对应于线条的至少一个性能的数据。
14.如权利要求12所述方法,其特征在于,所接受的几何图元包括所接受到的对应于椭圆的至少一个性能的数据。
15.如权利要求12所述方法,其特征在于,所接受的几何图元包括所接受到的对应于矩形的至少一个性能的数据。
16.如权利要求12所述方法,其特征在于,所接受的几何图元包括所接受到的对应于复杂的单个形状的至少一个性能的数据。
17.如权利要求12所述方法,其特征在于,所接受的几何图元包括所接受到的对应于形状列表的至少一个性能的数据和组合所列形状的操作的数据。
18.如权利要求1所述方法,其特征在于,至少一个画图图元是与画刷图标数据有关。
19.如权利要求18所述方法,其特征在于,画刷图标数据包括实线颜色画刷数据。
20.如权利要求18所述方法,其特征在于,画刷图标数据包括梯度画刷数据。
21.如权利要求20所述方法,其特征在于,梯度画刷图标数据包括线性梯度图标数据,并还包括至少一个起点和一个终点。
22.如权利要求20所述方法,其特征在于,梯度画刷图标数据包括射线梯度图标数据,并还包括圆圈数据和焦点。
23.如权利要求18所述方法,其特征在于,画刷图标数据包括图像画刷数据。
24.如权利要求18所述方法,其特征在于,画刷图标数据包括九个栅格画刷数据。
25.如权利要求18所述方法,其特征在于,画刷图标数据包括视窗画刷数据。
26.如权利要求18所述方法,其特征在于,画刷图标数据包括对另一视窗的参考。
27.如权利要求1所述方法,其特征在于,在有关视窗中保持的数据包括以画图内容方式接受到的画刷数据。
28.如权利要求1所述方法,其特征在于,在有关视窗中保持的数据包括以画图内容方式接受到的画笔数据。
29.如权利要求28所述方法,其特征在于,画笔数据包括至少下列数据其中之一:宽度数据、线段连接数据、线条端点数据、斜接限制数据、虚线矩阵数据和虚线偏置数据。
30.如权利要求1所述方法,其特征在于,在有关视窗中保持的数据包括以画图内容方式接受到的效果数据。
31.如权利要求1所述方法,其特征在于,在有关视窗中保持的数据包括以画图内容方式接受到的不透明数据。
32.如权利要求1所述方法,其特征在于,在有关视窗中保持的数据包括以画图内容方式接受到的剪辑数据。
33.如权利要求1所述方法,其特征在于,在有关视窗中保持的数据包括以画图内容方式接受到的变换数据。
34.如权利要求33所述方法,其特征在于,变换数据包括变换列表数据。
35.如权利要求33所述方法,其特征在于,变换数据包括转换平移数据。
36.如权利要求33所述方法,其特征在于,变换数据包括旋转数据。
37.如权利要求33所述方法,其特征在于,变换数据包括缩放比例数据。
38.如权利要求33所述方法,其特征在于,变换数据包括倾斜数据。
39.如权利要求33所述方法,其特征在于,变换数据包括矩阵数据。
40.如权利要求33所述方法,其特征在于,变换数据包括适用于至少一个变换性能的变换动画数据。
41.如权利要求1所述方法,其特征在于,在有关视窗中保持的数据包括以画图内容方式接受到的可视窗(ViewBox)数据,通过该方法将视窗填充栅格单元中。
42.如权利要求41所述方法,其特征在于,可视窗(ViewBox)数据包括至少下列指定性能其中之一:扩展、水平对准和垂直对准。
43.如权利要求1所述方法,其特征在于,处理背景图形包括传递背景图形。
44.如权利要求1所述方法,其特征在于,处理背景图形包括传输背景图形。
45.计算机可读媒介具有执行权利要求1所述方法的计算机可执行的指令。
46.计算机实施方法,包括:
在与背景图形数据结构的界面上接受功能性调用;以及,
处理与功能型调用有关的数据,以在背景图形中创建图标并相互层次地设置这些图标,该图标对应于背景图形图标的模型。
47.如权利要求46所述方法,其特征在于,图标其中之一包括有效视窗,且还包括调用程序重新填满有效视窗。
48.如权利要求46所述方法,其特征在于,图标其中之一包括有效视窗,且还包括提供画图内容来填满以画图内容方法接受到的画图数据有关的图标。
49.如权利要求48所述方法,还包括以画图内容方法接受到的数据包括着图像数据。
50.如权利要求48所述方法,还包括以画图内容方法接受到的数据包含着视频数据。
51.如权利要求48所述方法,还包括以画图内容方法接受到数据包含着几何数据。
52.如权利要求51所述方法,其特征在于,几何数据包括下列数据其中之一:线条数据、椭圆数据、矩形数据或者复杂的单一形状的数据。
53.如权利要求51所述方法,其特征在于,几何数据包括一系列形状和应用组合所列形状的操作。
54.如权利要求48所述方法,还包括以画图内容方法接受到的数据包含着画刷数据。
55.如权利要求54所述方法,其特征在于,画刷数据包括实线颜色的画刷数据。
56.如权利要求54所述方法,其特征在于,画刷数据包括梯度画刷数据。
57.如权利要求54所述方法,其特征在于,画刷数据包括图像画刷数据。
58.如权利要求54所述方法,其特征在于,画刷数据包括九个栅格的画刷数据。
59.如权利要求54所述方法,其特征在于,画刷数据包括视窗画刷数据。
60.如权利要求48所述方法,还包括以画图内容方法接受到的数据包含着画笔数据。
61.如权利要求60所述方法,其特征在于,画笔数据包括至少下列数据其中之一:宽度数据、线段连接数据、线条端点数据、斜接限制数据、虚线矩阵数据和虚线偏置数据。
62.如权利要求48所述方法,还包括以画图内容方法接受到的不透明数据。
63.如权利要求48所述方法,还包括以画图内容方法接受到的剪辑数据。
64.如权利要求48所述方法,还包括以画图内容方法接受到的变换数据。
65.如权利要求48所述方法,还包括接受到的可视窗(ViewBox)数据包含着至少下列性能其中之一:扩展、水平对准和垂直对准。
66.如权利要求46所述方法,还包括,处理背景图形,向图形子系统提供图形数据。
67.如权利要求46所述方法,其特征在于,图标其中之一包括表面视窗,并还包括与表面视窗有关的保持的像素数据。
68.如权利要求67所述方法,还包括,表面视窗涉及到通过子图传递方法的至少一个其它视窗的子图。
69.计算机可读媒介具有执行权利要求46所述方法的计算机可执行的指令。
70.在计算环境中,一个系统包括:
配置包含背景图形图标模型的图标的背景图形数据结构;
在程序和背景图形数据结构之间的界面,该界面配置成:
1)接受程序的功能型调用,以在背景图形中创建图标,以及,
2)以相互层次地排列这些图标,该图标对应于背景图形图标的模型。
71.如权利要求70所述系统,其特征在于,界面用具体例子说明了创建至少一个图标的编制器。
72.如权利要求70所述系统,其特征在于,图标之一包括视窗。
73.如权利要求72所述系统,还包括画图内容,返回到采用数据来填满视窗的画图内容的参考的界面。
74.如权利要求72所述系统,其特征在于,视窗包括画图视窗。
75.如权利要求72所述系统,其特征在于,视窗包括有效视窗。
76.如权利要求72所述系统,还包括视窗管理器,它构成对背景图形的处理,以对至少一个低层图形元件提供图形数据。
77.如权利要求72所述系统,其特征在于,视窗包括表面视窗。
78.如权利要求77所述系统,其特征在于,表面视窗包括子图形,并且还包括用于传递子图形的表面视窗管理器。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US10/402,268 | 2003-03-27 | ||
US10/402,268 US7126606B2 (en) | 2003-03-27 | 2003-03-27 | Visual and scene graph interfaces |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1534511A true CN1534511A (zh) | 2004-10-06 |
CN100557596C CN100557596C (zh) | 2009-11-04 |
Family
ID=23591219
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB031457363A Expired - Lifetime CN100557596C (zh) | 2003-03-27 | 2003-06-30 | 视件和场景图接口 |
Country Status (24)
Country | Link |
---|---|
US (1) | US7126606B2 (zh) |
EP (1) | EP1462936A3 (zh) |
JP (2) | JP2004295858A (zh) |
KR (1) | KR100962920B1 (zh) |
CN (1) | CN100557596C (zh) |
AU (1) | AU2003204006B2 (zh) |
BR (1) | BR0302161A (zh) |
CA (1) | CA2428814A1 (zh) |
CO (1) | CO5460279A1 (zh) |
EC (1) | ECSP034608A (zh) |
GT (1) | GT200300264A (zh) |
HN (1) | HN2003000146A (zh) |
HR (1) | HRP20030390A2 (zh) |
HU (1) | HUP0301191A3 (zh) |
IL (1) | IL155927A (zh) |
MX (1) | MXPA03004412A (zh) |
NO (1) | NO329881B1 (zh) |
NZ (1) | NZ525666A (zh) |
PA (1) | PA8573901A1 (zh) |
RU (1) | RU2324229C2 (zh) |
SG (1) | SG121772A1 (zh) |
TR (1) | TR200300695A2 (zh) |
TW (1) | TWI291627B (zh) |
ZA (1) | ZA200303507B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102393816A (zh) * | 2011-06-24 | 2012-03-28 | 浙大网新科技股份有限公司 | WinCE应用在OMS上全屏显示的方法 |
US10649631B2 (en) | 2010-04-28 | 2020-05-12 | Huawei Device Co., Ltd. | Method and apparatus for adding icon to interface of android system, and mobile terminal |
CN115309313A (zh) * | 2022-08-09 | 2022-11-08 | 盈帜科技(常州)有限公司 | 一种二维场景海量矢量数据显示方法及设备 |
Families Citing this family (66)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7064766B2 (en) | 2001-10-18 | 2006-06-20 | Microsoft Corporation | Intelligent caching data structure for immediate mode graphics |
US7619633B2 (en) * | 2002-06-27 | 2009-11-17 | Microsoft Corporation | Intelligent caching data structure for immediate mode graphics |
US6919891B2 (en) | 2001-10-18 | 2005-07-19 | Microsoft Corporation | Generic parameterization for a scene graph |
US7443401B2 (en) * | 2001-10-18 | 2008-10-28 | Microsoft Corporation | Multiple-level graphics processing with animation interval generation |
US7161599B2 (en) * | 2001-10-18 | 2007-01-09 | Microsoft Corporation | Multiple-level graphics processing system and method |
FR2851716A1 (fr) * | 2003-02-21 | 2004-08-27 | France Telecom | Procede pour la gestion de descriptions d'animations graphiques destinees a etre affichees, recepteur et systeme mettant en oeuvre ce procede. |
US7088374B2 (en) * | 2003-03-27 | 2006-08-08 | Microsoft Corporation | System and method for managing visual structure, timing, and animation in a graphics processing system |
US7486294B2 (en) * | 2003-03-27 | 2009-02-03 | Microsoft Corporation | Vector graphics element-based model, application programming interface, and markup language |
US7466315B2 (en) * | 2003-03-27 | 2008-12-16 | Microsoft Corporation | Visual and scene graph interfaces |
US7417645B2 (en) * | 2003-03-27 | 2008-08-26 | Microsoft Corporation | Markup language and object model for vector graphics |
US20050132385A1 (en) * | 2003-10-06 | 2005-06-16 | Mikael Bourges-Sevenier | System and method for creating and executing rich applications on multimedia terminals |
US7511718B2 (en) * | 2003-10-23 | 2009-03-31 | Microsoft Corporation | Media integration layer |
US7290216B1 (en) * | 2004-01-22 | 2007-10-30 | Sun Microsystems, Inc. | Method and apparatus for implementing a scene-graph-aware user interface manager |
US7603624B2 (en) * | 2004-10-21 | 2009-10-13 | Microsoft Corporation | System and method for styling content in a graphical user interface control |
US7564458B2 (en) * | 2004-12-15 | 2009-07-21 | Microsoft Corporation | System and method for interactively linking data to shapes in a diagram |
US7924285B2 (en) * | 2005-04-06 | 2011-04-12 | Microsoft Corporation | Exposing various levels of text granularity for animation and other effects |
US20060232589A1 (en) * | 2005-04-19 | 2006-10-19 | Microsoft Corporation | Uninterrupted execution of active animation sequences in orphaned rendering objects |
KR100820256B1 (ko) * | 2005-07-01 | 2008-04-07 | 엔에이치엔(주) | 게임 엔진에서 이펙트를 구현하는 방법 및 그 장치 |
WO2007004837A1 (en) * | 2005-07-01 | 2007-01-11 | Nhn Corporation | Method for rendering objects in game engine and recordable media recording programs for enabling the method |
RU2457532C2 (ru) * | 2006-03-10 | 2012-07-27 | Кенджи Йошида | Система обработки ввода для устройства обработки информации |
KR100989459B1 (ko) * | 2006-03-10 | 2010-10-22 | 네로 아게 | 비디오 프레임 시퀀스를 제공하는 장치 및 방법, 장면 모델을 제공하는 장치 및 방법, 장면 모델, 메뉴 구조를 생성하는 장치 및 방법 그리고 컴퓨터 프로그램 |
US8612847B2 (en) * | 2006-10-03 | 2013-12-17 | Adobe Systems Incorporated | Embedding rendering interface |
JP4889432B2 (ja) * | 2006-10-06 | 2012-03-07 | 愛三工業株式会社 | 燃料ポンプ |
US20080158254A1 (en) * | 2006-12-29 | 2008-07-03 | Hong Jiang | Using supplementary information of bounding boxes in multi-layer video composition |
US8786628B2 (en) * | 2007-09-14 | 2014-07-22 | Microsoft Corporation | Rendering electronic chart objects |
EP2158754A1 (en) * | 2008-01-18 | 2010-03-03 | Fotonation Vision Limited | Image processing method and apparatus |
US8009921B2 (en) * | 2008-02-19 | 2011-08-30 | Xerox Corporation | Context dependent intelligent thumbnail images |
US8274516B2 (en) * | 2008-08-04 | 2012-09-25 | Microsoft Corporation | GPU scene composition and animation |
KR101520067B1 (ko) * | 2008-10-02 | 2015-05-13 | 삼성전자 주식회사 | 윈도우 시스템을 구현한 그래픽 처리 방법 및 그 장치 |
US8477136B2 (en) * | 2009-02-13 | 2013-07-02 | Mobitv, Inc. | Functional presentation layer in a lightweight client architecture |
US8638343B2 (en) * | 2009-04-30 | 2014-01-28 | Microsoft Corporation | Data visualization platform performance optimization |
US9250926B2 (en) * | 2009-04-30 | 2016-02-02 | Microsoft Technology Licensing, Llc | Platform extensibility framework |
US8751284B2 (en) * | 2009-04-30 | 2014-06-10 | United Parcel Service Of America, Inc. | Systems and methods for a real-time workflow platform using Petri net model mappings |
US8610731B2 (en) * | 2009-04-30 | 2013-12-17 | Microsoft Corporation | Dynamic graphics pipeline and in-place rasterization |
US8332811B2 (en) * | 2009-04-30 | 2012-12-11 | United Parcel Service Of America, Inc. | Systems and methods for generating source code for workflow platform |
US9396001B2 (en) * | 2010-11-08 | 2016-07-19 | Sony Corporation | Window management for an embedded system |
US9152395B2 (en) | 2010-12-13 | 2015-10-06 | Microsoft Technology Licensing, Llc | Response to user input based on declarative mappings |
US9563971B2 (en) | 2011-09-09 | 2017-02-07 | Microsoft Technology Licensing, Llc | Composition system thread |
US9384711B2 (en) | 2012-02-15 | 2016-07-05 | Microsoft Technology Licensing, Llc | Speculative render ahead and caching in multiple passes |
US9177533B2 (en) | 2012-05-31 | 2015-11-03 | Microsoft Technology Licensing, Llc | Virtual surface compaction |
US9286122B2 (en) | 2012-05-31 | 2016-03-15 | Microsoft Technology Licensing, Llc | Display techniques using virtual surface allocation |
US9235925B2 (en) * | 2012-05-31 | 2016-01-12 | Microsoft Technology Licensing, Llc | Virtual surface rendering |
US9230517B2 (en) | 2012-05-31 | 2016-01-05 | Microsoft Technology Licensing, Llc | Virtual surface gutters |
US9224239B2 (en) | 2013-03-14 | 2015-12-29 | Dreamworks Animation Llc | Look-based selection for rendering a computer-generated animation |
US9171401B2 (en) | 2013-03-14 | 2015-10-27 | Dreamworks Animation Llc | Conservative partitioning for rendering a computer-generated animation |
US9208597B2 (en) | 2013-03-15 | 2015-12-08 | Dreamworks Animation Llc | Generalized instancing for three-dimensional scene data |
US9218785B2 (en) | 2013-03-15 | 2015-12-22 | Dreamworks Animation Llc | Lighting correction filters |
US9514562B2 (en) * | 2013-03-15 | 2016-12-06 | Dreamworks Animation Llc | Procedural partitioning of a scene |
US9589382B2 (en) * | 2013-03-15 | 2017-03-07 | Dreamworks Animation Llc | Render setup graph |
US9659398B2 (en) | 2013-03-15 | 2017-05-23 | Dreamworks Animation Llc | Multiple visual representations of lighting effects in a computer animation scene |
US9811936B2 (en) | 2013-03-15 | 2017-11-07 | Dreamworks Animation L.L.C. | Level-based data sharing for digital content production |
US9230294B2 (en) | 2013-03-15 | 2016-01-05 | Dreamworks Animation Llc | Preserving and reusing intermediate data |
US9626787B2 (en) | 2013-03-15 | 2017-04-18 | Dreamworks Animation Llc | For node in render setup graph |
US20140351722A1 (en) * | 2013-05-23 | 2014-11-27 | Microsoft | User interface elements for multiple displays |
US9307007B2 (en) | 2013-06-14 | 2016-04-05 | Microsoft Technology Licensing, Llc | Content pre-render and pre-fetch techniques |
CN103473077A (zh) * | 2013-09-27 | 2013-12-25 | 珠海市君天电子科技有限公司 | 丰富应用程序主窗口显示界面的方法及装置 |
US9733823B2 (en) | 2015-04-01 | 2017-08-15 | Microsoft Technology Licensing, Llc | View activation via hit testing in an asynchronous windowing system |
CN113597331A (zh) * | 2019-03-19 | 2021-11-02 | 高联游戏有限公司 | 动态3d环境生成 |
US10607105B1 (en) * | 2019-03-27 | 2020-03-31 | Disney Enterprises, Inc. | Perceptual data association |
CN110826218B (zh) * | 2019-11-01 | 2023-03-21 | 成都景中教育软件有限公司 | 一种动态几何软件中基于参数的坐标系实现方法 |
US11210847B2 (en) | 2019-11-27 | 2021-12-28 | Arm Limited | Graphics processing systems |
US11216993B2 (en) | 2019-11-27 | 2022-01-04 | Arm Limited | Graphics processing systems |
US11170555B2 (en) | 2019-11-27 | 2021-11-09 | Arm Limited | Graphics processing systems |
US11210821B2 (en) * | 2019-11-27 | 2021-12-28 | Arm Limited | Graphics processing systems |
KR102254768B1 (ko) * | 2020-08-28 | 2021-05-24 | 광주과학기술원 | 씬 그래프 생성장치 |
US20220134222A1 (en) * | 2020-11-03 | 2022-05-05 | Nvidia Corporation | Delta propagation in cloud-centric platforms for collaboration and connectivity |
Family Cites Families (28)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5912666A (en) | 1994-08-23 | 1999-06-15 | Object Technology Licensing Corp. | Object-oriented global cursor tool |
US5561752A (en) * | 1994-12-22 | 1996-10-01 | Apple Computer, Inc. | Multipass graphics rendering method and apparatus with re-traverse flag |
US5986667A (en) * | 1994-12-22 | 1999-11-16 | Apple Computer, Inc. | Mechanism for rendering scenes using an object drawing subsystem |
WO1996019780A1 (en) * | 1994-12-22 | 1996-06-27 | Apple Computer, Inc. | Three-dimensional graphics rendering system |
US5930810A (en) | 1995-08-09 | 1999-07-27 | Taylor Corporation | Printing system with pre-defined user modifiable forms and local and remote printing |
US6275857B1 (en) | 1996-10-30 | 2001-08-14 | Microsoft Corporation | System and method for freeing shared resources in a computer system |
US6195694B1 (en) | 1997-03-13 | 2001-02-27 | International Business Machines Corporation | Server for reconfiguring control of a subset of devices on one or more kiosks |
US6215495B1 (en) * | 1997-05-30 | 2001-04-10 | Silicon Graphics, Inc. | Platform independent application program interface for interactive 3D scene management |
US6314470B1 (en) | 1997-07-25 | 2001-11-06 | Hewlett Packard Company | System and method for asynchronously accessing a graphics system for graphics application evaluation and control |
US6243856B1 (en) * | 1998-02-03 | 2001-06-05 | Amazing Media, Inc. | System and method for encoding a scene graph |
US6266053B1 (en) * | 1998-04-03 | 2001-07-24 | Synapix, Inc. | Time inheritance scene graph for representation of media content |
US6237092B1 (en) | 1998-05-05 | 2001-05-22 | International Business Machines Corp. | Client-server system with central application management allowing an administrator to configure user and group contexts during application configuration without relaunching the application |
US6263339B1 (en) | 1998-08-25 | 2001-07-17 | Informix Software, Inc. | Dynamic object visualization and code generation |
JP2001273520A (ja) | 2000-03-23 | 2001-10-05 | Famotik Ltd | マルチメディアドキュメント統合表示システム |
US6717599B1 (en) | 2000-06-29 | 2004-04-06 | Microsoft Corporation | Method, system, and computer program product for implementing derivative operators with graphics hardware |
US6910044B2 (en) | 2000-09-20 | 2005-06-21 | Sap Aktiengesellschaft | Method and apparatus for structuring, maintaining, and using families of data |
FR2823942A1 (fr) * | 2001-04-24 | 2002-10-25 | Koninkl Philips Electronics Nv | Dispositif pour une conversion d'un format bifs textuel vers un format bifs binaire |
US7069503B2 (en) | 2001-06-04 | 2006-06-27 | Murata Kikai Kabushiki Kaisha | Device and program for structured document generation data structure of structural document |
US6919891B2 (en) | 2001-10-18 | 2005-07-19 | Microsoft Corporation | Generic parameterization for a scene graph |
US7055092B2 (en) | 2001-12-05 | 2006-05-30 | Canon Kabushiki Kaisha | Directory for multi-page SVG document |
US20030110297A1 (en) | 2001-12-12 | 2003-06-12 | Tabatabai Ali J. | Transforming multimedia data for delivery to multiple heterogeneous devices |
US20040110490A1 (en) | 2001-12-20 | 2004-06-10 | Steele Jay D. | Method and apparatus for providing content to media devices |
KR100453225B1 (ko) | 2001-12-26 | 2004-10-15 | 한국전자통신연구원 | 3차원 가상 현실 구현을 위한 클라이언트 시스템과 이를이용한 가상 현실 구현 방법 |
US7076332B2 (en) | 2002-01-18 | 2006-07-11 | National Instruments Corporation | System and method for invoking execution of a sequence of operations that includes motion control, machine vision, and data acquisition (DAQ) functionality |
US7240346B2 (en) * | 2002-11-13 | 2007-07-03 | Microsoft Corporation | Method and system for accessing drawing resources |
US7088374B2 (en) | 2003-03-27 | 2006-08-08 | Microsoft Corporation | System and method for managing visual structure, timing, and animation in a graphics processing system |
US7466315B2 (en) | 2003-03-27 | 2008-12-16 | Microsoft Corporation | Visual and scene graph interfaces |
US8051389B2 (en) | 2003-08-26 | 2011-11-01 | Hewlett-Packard Development Company, L.P. | Methods of displaying resources of overlapping but separate hierarchies |
-
2003
- 2003-03-27 US US10/402,268 patent/US7126606B2/en not_active Expired - Lifetime
- 2003-05-02 NZ NZ525666A patent/NZ525666A/en not_active IP Right Cessation
- 2003-05-05 HU HU0301191A patent/HUP0301191A3/hu unknown
- 2003-05-06 AU AU2003204006A patent/AU2003204006B2/en not_active Ceased
- 2003-05-07 ZA ZA200303507A patent/ZA200303507B/xx unknown
- 2003-05-12 NO NO20032112A patent/NO329881B1/no not_active IP Right Cessation
- 2003-05-13 SG SG200302787A patent/SG121772A1/en unknown
- 2003-05-14 HR HR20030390A patent/HRP20030390A2/hr not_active Application Discontinuation
- 2003-05-14 EP EP03010808A patent/EP1462936A3/en not_active Withdrawn
- 2003-05-15 CA CA002428814A patent/CA2428814A1/en not_active Abandoned
- 2003-05-15 TW TW092113258A patent/TWI291627B/zh not_active IP Right Cessation
- 2003-05-15 IL IL155927A patent/IL155927A/en active IP Right Grant
- 2003-05-16 TR TR2003/00695A patent/TR200300695A2/xx unknown
- 2003-05-16 PA PA20038573901A patent/PA8573901A1/es unknown
- 2003-05-16 RU RU2003114530/09A patent/RU2324229C2/ru not_active IP Right Cessation
- 2003-05-16 EC EC2003004608A patent/ECSP034608A/es unknown
- 2003-05-16 BR BR0302161-0A patent/BR0302161A/pt not_active Application Discontinuation
- 2003-05-17 KR KR1020030031435A patent/KR100962920B1/ko active IP Right Grant
- 2003-05-19 JP JP2003141210A patent/JP2004295858A/ja active Pending
- 2003-05-19 MX MXPA03004412A patent/MXPA03004412A/es unknown
- 2003-05-19 CO CO03041492A patent/CO5460279A1/es not_active Application Discontinuation
- 2003-05-20 HN HN2003000146A patent/HN2003000146A/es unknown
- 2003-06-30 CN CNB031457363A patent/CN100557596C/zh not_active Expired - Lifetime
- 2003-12-01 GT GT200300264A patent/GT200300264A/es unknown
-
2010
- 2010-03-11 JP JP2010054241A patent/JP5101648B2/ja not_active Expired - Fee Related
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10649631B2 (en) | 2010-04-28 | 2020-05-12 | Huawei Device Co., Ltd. | Method and apparatus for adding icon to interface of android system, and mobile terminal |
US11079908B2 (en) | 2010-04-28 | 2021-08-03 | Huawei Device Co., Ltd. | Method and apparatus for adding icon to interface of android system, and mobile terminal |
US11561680B2 (en) | 2010-04-28 | 2023-01-24 | Huawei Device Co., Ltd. | Method and apparatus for adding icon to interface of android system, and mobile terminal |
CN102393816A (zh) * | 2011-06-24 | 2012-03-28 | 浙大网新科技股份有限公司 | WinCE应用在OMS上全屏显示的方法 |
CN102393816B (zh) * | 2011-06-24 | 2014-01-01 | 浙大网新科技股份有限公司 | WinCE应用在OMS上全屏显示的方法 |
CN115309313A (zh) * | 2022-08-09 | 2022-11-08 | 盈帜科技(常州)有限公司 | 一种二维场景海量矢量数据显示方法及设备 |
Also Published As
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1534511A (zh) | 视窗和背景图形接口 | |
CN1534476A (zh) | 矢量图形的标记语言和对象模型 | |
CN101421761B (zh) | 视件和场景图接口 | |
KR20070028202A (ko) | 매체 통합 계층 | |
WO2008118065A1 (en) | Graphics rendering system | |
CA2439082A1 (en) | Method and apparatus for processing photographic images | |
JP2006238429A (ja) | ハードウエア・アクセラレーティド・ブレンド・モード | |
CN1267859C (zh) | 用于在二维屏幕上绘制图像的绘制方法 | |
CN1271424A (zh) | 用于三维成像和记录的设备 | |
CN1560797A (zh) | 减少z缓冲区流量的三维图形处理机制 | |
WO2013120115A2 (en) | Motion picture project management system | |
CN1266582C (zh) | 大视图分块缓冲显示方法 | |
CN105096364B (zh) | 一种动画数据生成方法、装置及电子设备 | |
CN1231041A (zh) | 点光特性形成方法以及使用该方法的图像处理装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
ASS | Succession or assignment of patent right |
Owner name: MICROSOFT TECHNOLOGY LICENSING LLC Free format text: FORMER OWNER: MICROSOFT CORP. Effective date: 20150527 |
|
C41 | Transfer of patent application or patent right or utility model | ||
TR01 | Transfer of patent right |
Effective date of registration: 20150527 Address after: Washington State Patentee after: MICROSOFT TECHNOLOGY LICENSING, LLC Address before: Washington State Patentee before: Microsoft Corp. |
|
CX01 | Expiry of patent term | ||
CX01 | Expiry of patent term |
Granted publication date: 20091104 |