计算机的放大引擎及接口的制作方法

文档序号:6568140阅读:138来源:国知局
专利名称:计算机的放大引擎及接口的制作方法
计算机的放大引擎及接口背景当代的计算机系统向用户提供了放大其显示屏幕的一部分的能力,特别为视 力下降的用户使用计算机提供方便,但是也向主流用户提供了在特定背景中放大的 益处。显示屏幕被放大的部分可选择性地基于鼠标被定位的位置、键盘聚焦的位置、 和/或用户以其它方式编辑的位置,例如当选择诸如用于剪切和粘贴的内容时。通常,当用户运行放大器(magnifier)时,放大窗口打开并且在该窗口中显 示被放大的内容。用户可调节放大窗口的尺寸和位置、调节放大水平、以及可 能地选择例如反色的其它效果。 一种这样的放大器程序通过驱动器挂钩来操 作,以实质在屏幕捕捉操作中截获向视频驱动器发送的图形调用,其中放大器 程序随后在放大窗口中按比例扩大对应图形图像。虽然因此放大器向计算机用户提供了益处,但是通常现有的放大器是相对 受限的。例如,仅依赖于屏幕捕捉的放大器提供质量相对较低且性能较低的放 大分辨率。此外,放大器应用程序无法简单地由其它程序来使用。概述简言之,本发明的各个方面涉及将应用程序耦合到诸如放大程序的效果程 序的引擎和应用程序接口。这样,任何源内容可被放大或以其它方式改变(例 如弯曲)以在例如指定输出窗口的输出区域中査看。在一个示例实现中,提供了放大引擎以及将应用程序耦合到放大程序所使 用的接口集。这可通过向放大引擎标识放大窗口,以及标识要放大的源区域、 放大转换和可能的过滤标准一诸如要放大所明确包括或排除的任何窗口一来 实现。在另一个示例实现中,具有计算机可执行指令的计算机可读介质执行多个 步骤,包括接收如由变换所更改地显示已显示图形的一区域的请求。在接收到 与对该区域的图形命令对应的数据时,处理图形命令以便程序指定输出区域示 出该区域的经转换的表示。在另一个示例实现中,系统包括图形服务器,该服务器接收来自第一程序 的立即模式图形元素和来自第二程序的保留模式元素。放大引擎耦合于图形服 务器,并且具有用于耦合到放大程序的接口集。在发送到合成引擎之前,图形 引擎向放大程序提供与立即模式图形元素以及保留模式元素相对应的至少一些数据用于放大,以便构成包括已放大输出的图形输出。结合附图,根据以下详细描述,其它优点将变得显而易见。附图的简要描述本发明作为示例示出,并且不局限于附图,在这些附图中,类似附图标记 表示类似元素,其中

图1示出了可结合本发明的各个方面的通用计算环境的说明性示例。 图2是表示提供根据本发明的各个方面的放大器的示例步骤的流程图。 图3是表示根据本发明的各个方面用于放大文本和图形的示例实现的框图。图4是表示根据本发明的各个方面的示例放大引擎内的各个组件的框图。详细描述 示例性操作环境图1示出了其上实现本发明的适当计算系统环境100的一个示例。计算系统环境100仅作为合适的计算环境的一个示例,而非旨在对本发明的使用范围或功能 提出任何限制。计算环境100也不应当被解释为对示例性操作环境100中所示组件的任一个或组合具有依赖或要求。本发明可用于许多其它通用或专用计算系统环境或配置。可适于本发明的公知计算系统、环境和/或配置的示例包括但不限于个人计算机、服务器计算机、手持型或膝上型设备、平板设备、多处理机系统、基于微处理器的系统、机顶盒、可编程消费电子产品、网络PC、小型计算机、大型计算机、包括上述系统或设备的任一个的分布式计算环境等。可在由计算机执行的诸如程序模块的计算机可执行指令的通用环境中描述本 发明。通常,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、 对象、组件、数据结构等。也可在其中通过经由通信网络链接的远程处理设备执行 任务的分布式计算环境中实践本发明。在分布式计算环境中,程序模块可位于包括存储器存储设备的本地和/或远程计算机存储介质中。参看图1,用于实现本发明的示例性系统包括计算机110形式的通用计算设 备。计算机110的组件可包括但不限于处理单元120;系统存储器130;以及将 包括系统存储器在内的各种系统元件耦合到处理单元120的系统总线121。系统总线121可以是若干类型总线结构中的任意一种,包括存储器总线或存储器控制器、外围总线以及使用各种总线架构中的任一种的局域总线。作为示例而非限制,这些架构包括工业标准结构(ISA)总线、微通道结构(MCA)总线、增强型ISA (EISA) 总线、视频电子标准协会(VESA)局域总线、以及也称为Mezzanine总线的外围 部件互连(PCI)总线。计算机110通常包括各种计算机可读介质。计算机可读介质可以是可由计算 机IIO访问的任何可用介质,包括易失性和非易失性介质、以及可移动和不可移动 介质。作为示例而非限制,计算机可读介质可包括计算机存储介质和通信介质。计 算机存储介质包括以任何发放或技术实现用于存储诸如计算机可读指令、数据结 构、程序模块或其它数据的信息的的易失性和非易失性、可移动和不可移动介质。 计算机存储介质包括但不限于RAM、 ROM、 EEPROM、闪存或其它存储技术、 CD-ROM、数字多功能盘(DVD)或其它光盘存储器、磁带盒、磁带、磁盘存储 器或其它磁存储设备、或者可被用来存储所需信息并可由计算机110访问的任何其 它介质。通信介质通常体现为诸如载波或其它传送机制的调制数据信号中的计算机 可读指令、数据结构、程序模块或者其它数据,并且包括任意信息传输介质。术语 "已调制数据信号"是指以在信号中编码信息的方式设置或改变其特性中的一个或 多个的信号。作为示例而非限制,通信介质包括诸如有线网络或直接线连接的有线 介质、以及诸如声波、RF、红外线和其它无线介质的无线介质。以上任意组合也 应当被包括在计算机可读介质的范围内。系统存储器130包括诸如只读存储器(ROM) 131和随机存取存储器(RAM) 132的易失性和/或非易失性存储器形式的计算机存储介质。包含在诸如在启动期间 帮助在计算机110内的元件之间传递信息的基本例程的基本输入/输出系统133 (BIOS)通常被存储在ROM 131中。RAM 132通常包含可由处理单元120即时 访问和/或正在其上操作的数据和/或程序模块。作为示例而非限制,图l示出了操 作系统B4、应用程序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、其它程 序模块B6和程序数据137相同或不同。这里,操作系统144、应用程序145、其 它程序模块146和程序数据147被赋予不同附图标记,以便说明至少它们是不同的 副本。用户可通过诸如写字板或电子数字转换器164、话筒163、键盘162和通常 是指鼠标、跟踪球或触摸板的定点设备161向计算机110输入命令和信息。未在图 1中示出的其它输入设备可包括操纵杆、游戏垫、圆盘式卫星天线、扫描仪等。这 些或其它输入设备常常经由耦合于系统总线的用户输入接口 160连接到处理单元 120,但也可通过诸如并行端口、游戏端口或通用串行总线(USB)的其它接口和 总线结构连接。监视器191或其它类型的显示设备也经由诸如视频接口 190的接口 连接到系统总线121。监视器191还可与触摸屏面板等一体化。注意监视器和/ 或触摸屏面板可物理耦合到其中结合了诸如平板型个人计算机的计算设备110的 外壳。另外,诸如计算机设备110的计算机还可包括诸如扬声器195和打印机196 的其它外围输出设备,它们可经由输出外围接口 194等连接。计算机110可工作在使用到诸如远程计算机180的一个或多个远程计算机的 逻辑连接的网络化环境中。远程计算机180可以是个人计算机、服务器、路由器、 网络PC、对等设备或其它公共网络节点,并且通常包括以上就计算机110所描述 的组件中的多个或全部,但是图1仅示出了存储器存储设备181。图1中所示的逻 辑连接包括局域网(LAN) 171和广域网(WAN) 173,但也可包括其它网络。这 些网络环境在办公室、企业范围计算机网络、内联网和因特网中十分普遍。当用在LAN网络环境中时,计算机110经由网络接口或适配器170连接到 LAN 171。当用在WAN网络环境中时,计算机110通常包括调制解调器172或在诸如因特网的WAN 173上建立通信的其它装置。或为内置式或为外置式的调制解 调器172可经由用户输入接口 160或其它适当的机制连接到系统总线121。在网络 化环境中,关于计算机110所述的程序模块或其部分可被存储在远程存储器存储设 备中。作为示例而非限制,图1示出了驻留在存储器设备181上的远程应用程序 185。应当理解,所示网络连接仅是示例性的,并且也可使用在计算机之间建立通 信链接的其它装置。本发明所述技术的各个方面涉及提供可在其上构建放大应用程序、特别是高 质量程序的平台。同时,本发明提供了一种机制,其它应用程序一包括诸如文字处 理和电子数据表程序的主流应用程序一很容易经由该机制提供放大功能。通常,这通过放大引擎以及应用程序接口来实现,该接口提供诸如经由操作 系统组件将放大应用程序耦合到计算机系统所需的功能中的多个。在本文所述的一 个示例实现中,以可由任何应用程序主宿或独立地运行(例如经由操作系统外壳) 的Win32控件的形式描述放大引擎和接口。然而,应该理解,不管本文所述的任 何具体实现或示例如何,本发明并不限于通用控件或Win32控件。相反,有用于实现本发明的许多可行方法,因而本发明并不限于本文所用的任何具体示例,而是 可使用在通用计算中提供益处和优点的各种方法。参看附图的图2,示出了用于操作如本文以控件形式描述的放大器的一般流程 图。通常,任何程序窗口可以是放大窗口,因此,例如,程序可打开类似对话框或 其它弹出窗口的窗口,并将其用于示出屏幕另一区域的经放大的图像。为了将窗口 设置为放大窗口, 一程序以常规方式接收窗口句柄(hwnd),例如,在一个实现 中,放大窗口经由CreateWindow (创建窗口) API来创建,并且这些窗口可类似 于任何其它常见控件一样被显示、隐藏以及再细分类。这些窗口的上色码(paint code)使用放大堆栈来绘制桌面的经转换副本。类似于其它窗口,该程序可指定剪 切区域或阿尔法(alpha)层来进一步例如经由SetWindowRgn来控制输出。放大 窗口渲染堆栈(以下参照图4所述)使用窗口剪切来减少所需的处理量。一旦创建,程序(经由应用程序接口)调用放大引擎/API初始化函数,从而 提供句柄。这大体上经由步骤202在图2中表示出;注意,在以下阐述放大引擎/API 的各个函数。步骤204表示放大引擎/API310 (图3)进行注册以接收窗口消息。注意在 此示例环境中,驱动器挂钩是不可用的,或者至少是非期望的,因而放大引擎/API经由窗口消息队列获得图形命令。通常为外壳或其它应用程序的API的调用方还标识要放大的区域,该区域可 以是大到整个桌面的任何实用矩形。这经由步骤206来表示,其中调用方标识放大 源。注意放大源可改变;例如,窗口可围绕鼠标指针,并且例如以鼠标指针为中 心。随着鼠标指针移动,该源改变,从而鼠标指之下的任何东西随着鼠标指针在其上移过而呈现为放大。注意,这些鼠标指针放大窗口还可以固定在桌面上;然而,源仍随着鼠标指针而改变,并由此改变放大窗口中的内容。对系统鼠标光标作出某些考虑。鼠标行为可取决于应用专用(application-specific)策略。这扩展到主机应用以添加任何情况专用鼠标处理。例如,光标可处于放大窗口之上,但是放大窗口将不对鼠标点击进行碰撞检 测(hit-test)。结果,点击将穿过放大窗口到达其下的窗口。这可导致混淆,诸如 当系统光标在输出窗口之下,但不在源矩形内;然后,它将在用户界面中用户无法 査看的称为"死区"的区域上。 一种解决方案是在输出中显式渲染除系统光标之外 的经放大的光标。标记(MS—SHOWMAGNIFIEDCURSOR)允许显示所属应用 和隐藏该经放大的光标。另一标记(MS—CLIPAROUNDCURSOR)使放大器窗 口在光标处于死区中时剪切掉该系统光标周围的区域。步骤208表示获取(通常)用于例如2x、 3x等的放大水平的转换。注意 转换可指示诸如弯曲的不同于放大的一些要素,并且如果使用放大,则放大可 以是lx (无放大)或小于lx的某些分数,例如可实尺寸现縮小的图像。因此, 尽管本文主要参照放大来描述本发明,但是可应用包括在技术上不放大或縮小 的等同变换的任何变换。注意输出矩形基本上被放大处理忽略;如果放大因 子过小,则输出将不会填满放大窗口。如果放大因子过大,输出将被剪切。在 这两种情况中,输出锚定在输出窗口中的O,O处。步骤210表示选择窗口放大或过滤的概念。更具体地,并非指定区域中的 所有东西都需要放大。相反,放大引擎/API使得程序能够指定对哪些窗口进行 放大,并且哪些窗口应当排除在最后的放大输出之外。注意放大器窗口从不 放大其自身,尽管这么做是可行的。可经由包括或排除来进行过滤。因此,程序可指定要包括的窗口列表(但 并非放大窗口),或者选择放大除那些明确排除的窗口之外的所有窗口 (放大 窗口将被排除)。这样,程序对得以放大的窗口具有显著的灵活性。一旦放大引擎/API 310被配置,则图3就示出放大引擎/API 310通常如何操作。图3示出了示例图形处理配置,其中可能的不同类型图形数据可通过应 用程序等来提供以在显示器上呈现。 一类众所周知的图形输出是立即模式图 形,其中应用提供了向显示器直接绘制内容(即,文本和图形)的指令(例如 GDI元素)。另一类图形输出是诸如来自呈现子系统的程序的保留模式图形,该程序提供了根据其来在此程序的表面上构建屏幕绘图(screen graph)或渲染 树(rendering tree)的绘制元素。然后,处理渲染树来获得适当的输出。这里 出于说明的目的,"GDI"通常用于指代程序打算提供立即模式图形的元素和 内容(即使实际上经由重新定向到表面来保留),而"渲染树"数据用于指代 程序打算提供保留模式图形的元素和内容。为了合成立即模式图形和保留模式图形,重定向层312实质上将GDI图形 发送到表面,就如同立即模式图形是保留模式指令一样。通常包括用于处理GDI 元素的光栅器(rasterizer)等的图形服务器314向合成引擎318提供包含来自 各个表面的一个或多个位图和/或元素的图形流316。然后,合成引擎合成来自 表面的各种输出,并且将合成图形数据发送到显卡以再现图形输出。在一个实施例中,对于每组GDI数据,图形流316可包括光栅化位图。这 是因为在此实现中,合成引擎318仅包括针对呈现子系统的元素(这对应于渲 染树)的光栅器,并且不对GDI元素进行光栅化。然而,注意对于要放大的GDI数据,可在用于由放大引擎/API 322以及 与其连接的组件进行处理的流中发送GDI元素,它们在向合成引擎320发送之 前对元素进行光栅化。更具体地, 一种放大可视内容的方法是使用其光栅化位 图来縮放该内容,与常规放大所做的一样。然而,这通常提供质量较低和性能 较低的结果,但是对于现有立即模式程序是合理的。或者,通过改变元素的数 据,例如,针对2X放大加倍字体大小、线长度等来获得质量和性能更好的放 大。图3概念性地示出导向放大引擎/API312的图形流的一部分。如上所述, 为了在无需驱动器挂钩的情况下接收图形元素,放大引擎/API注册窗口消息。 通常,图形流要放大的任何部分首先被发送到放大引擎/API 3。这允许图形元 素的预处理和转换,这通常包括縮放。縮放可通过插件客户机縮放组件322来实现。除此之外或作为替代,放大 和其它效果可通过称为"第三方"程序324的单独的放大效果程序来实现,但 是并非旨在将这种程序限于任何具体供应商,并且实际上,放大引擎/API的提供商也可提供这种程序。例如,这随着更好的放大/效果程序一诸如质量更好的位图放大程序一变得可用而提供了可扩展性。或者,希望实现其自身StretchBlt算法(可能使用不同的平滑算法)的应用可通过将放大转换设置为期望转换、 然后在其自身的过滤器中执行放大来这样做。对转换的设置对成像子系统(例如Avalon/媒体集成层)的不通过可扩展观点来处理的元素縮放所必需的。在 一个实施例中,应用经由SetMagnifierlmageFilterCallback (设置放大器图像过 滤器回调)函数处理其自身的放大。通常,用于执行放大的至少一个组件是可用的。对于流的放大部分,放大引擎312由此可如所配置地处理元素/或位图,并 且将经放大的数据适当返回到图形服务器和/或合成引擎。如果仍期望诸如色彩 效果的其它(例如非縮放)效果,则图形服务器314和/或合成引擎318可再次 调用放大引擎/API 312以便路由到适当的效果代码。这在图3中由这些组件之 间的箭头来表示。关于渲染树元素,放大之类比较简单,因为转换节点可通过更改元素而添 加到渲染树。如上所述,GDI元素可在光栅化之前被转换,以完成放大等,或 者GDI元素可被光栅化成位图,并且该位图以例如常规实现的公知方式来放 大。在任何事件中,图形流316最终包含包括有各种元素和/或位图的各种表面, 这些元素和位图包括与放大内容相对应的数据。图4示出了各种组件,包括放大引擎/API312的进一步的细节。消息处理 器组件430接收进入如上所述的已注册控件的消息。这是实际放大窗口的处理 进入消息(与公开API相匹配)和调用适当的内部组件的WinProc。图形流读出器组件432与选择窗口过滤组件434 —起工作,从而仅来自图 形服务器314的、与所包括或未被排除的窗口相对应的GDI数据和渲染树被处 理用于放大。在一个实现中,图形流读出器组件432是图形管道(流)API的 客户机,而且从图形流接收原始分组并将它们传递给选择窗口过滤组件 (HWND分组过滤器)434。该选择窗口过滤组件434基于与每个分组相关联 的HWND来过滤来自图形管道读出器组件的分组。放大器HWND总是被滤出, 并且HWND的包括或排除列表用于进一步过滤分组。对于相关消息,即,对于要放大的源窗口 (例如,基于它们的HWND), 图像过滤器436与縮放组件322和/或第三方放大器324 —起工作,以便在图4 的示例中,通过更改元素来縮放图像。通常,图像过滤器436实 现插件的回调机制来实现定制图像过滤代码。然后,GDI内容在传递到图形流写入器440之前由内容光栅器438来光栅 化,同时将渲染树数据以其更改方式传递到图形流写入器440,它将在其中被 光栅化。内容光栅器438负责对分组进行光栅化和合成。该组件具有三个显著 属性,即转换、剪切区域(将源矩形与来自输出窗口的输出剪切组合)和输出 表面,其中输出表面尺寸基于该剪切区域和转换。内容光栅器438被耦合到图形流写入器(合成引擎写入器)440以便与图 形服务器通信以及组合桌面的放大区域和该桌面的剩余部分。这样,放大数据 在适当的图形流中到达合成引擎318。放大数据可被返回到放大引擎/API312用于预处理,以便添加经由效果组 件442示出的任何效果。通常,效果组件442实现其它(例如第三方)代码的 机制以实现定制色彩效果。注意尽管未在图4中具体示出,但是诸如第三方 放大器效果程序324的插件效果可耦合到效果组件442以实现所需效果。希望 使用其自身效果的应用可通过在经由SetMagnifierColorEffectsShader (设置放 大器色彩效果着色器)注册的定制像素着色器(pixel shader)例程中实现效果 来这样做。这样,放大程序可容易地耦合到计算机系统,同时因为放大API使得放大 器能够被实现为Win32控件,所以放大器控件可进入任何合适的应用程序中。 有可能构建在用户在控件之间移动时扩大控件并刷新的放大客户机。此外,可提供多个放大器窗口作为控件。它们可引用具有不同的縮放因子 的同一源视图、或者不同源视图和/或縮放因子。为了优化,当使用不同縮放因 子来放大同一源视图时,仅向放大引擎/API 312提供一次源数据。如上所述,可使用预合成过滤,由此程序可在放大引擎合成图像之前插入 定制过滤机制。也可插入合成后过滤,来在放大引擎合成图像之后进行操作。 注意可在放大后的目标分辨率下自动光栅化文本。更具体地,渲染树元素调用通常引用字形(glyph)位图高速缓冲存储器中 的索引。当前,在默认屏幕分辨率下对这些位图进行光栅化,并且无法从高速 缓冲存储器索引的序列生成文本串。放大引擎将获得图像的在放大后的縮放分 辨率下光栅化的另一副本。GDI文本元素将被重新渲染成放大后的縮放分辨率。 这适用于其中GDI文本元素可用的情况。 示例API函数和结构及犬窗/7辦对于开发者,第一步骤是使用Magnificationlnitialize()函数来从具有句柄 HWND的任何窗口创建放大窗口。放大窗口如常见控件一样操作。所创建控件 的HWND用作放大API的其它方法的第一参数。MS_SHOWMAGNIEDCURSOR设置该标记将使光标的放大图像在输出中显示。 MS一CLIPAROUNDCURSOR设置该标记将使在系统光标之下的区域中的放大窗口被剪切。这使得用户可(如果仅部分地)査看实际在光标之下的UI。 MS—INVERTCOLORS设置该标记将导致放大器窗口的内容反色。Window Message (窗口消息)存在放大器控件了解的窗口消息。它们使用SendMessageAPI来发送。 MGM—SETSOURCE设置要放大的源矩形。 WPARAM: NULL (空)LPARAM:具有目标矩形所应当依据的屏幕坐标中的矩形的*11£(:丁。 Returns (返回)成功则为0 MGM GETSOURCE检索当前正被放大的源矩形。 WPARAM: NULL (空)LPARAM:将使用目标矩形的屏幕坐标中的矩形来填充的4RECT。 Returns (返回)成功则为0 MGM—SETTRANSFORM设置应用到源矩形用于输出的转换。通常用于縮放该输出。 WPARAM: NULL (空)LPARAM: *TRANSFORM,指定要使用的转换。 Returns (返回)成功为TRUE (真) MGM—GETTRANSFORM返回应用到源矩形的转换。WPARAM: NULL (空)LP ARAM: * TRANSFORM,将使用当前转换来填充。Returns (返回)成功则为0 MGM_SETFILTERUST设置用于过滤的HWND列表。放大器窗口总是被滤除(即,排除或不包括)。此列表是要放大的窗口的包括列表或者要滤除的窗口的排除列表。WPARAM:为过滤列表中的HWND的数量的整数。LPARAM: *FILTERLIST,指定要过滤的HWND列表或新的过滤模式。Returns (返回)成功为TRUE,失败为FALSE (假) MGM—GETFILTERUST将count (计数)HWND复制到被分配了 HWND数组的调用方。WPARAM:要覆盖(copy over)的HWND计数。LPARAM: *FILTERLIST,使用当前过滤模式来填充,并且将被填充至其 hwnd列表(hwndList)的计数数量。hwnd列表指向对count HWND分配足够空间的存储器。Returns (返回)表示列表中的当前HWND数量的整数。通过计数为0 (零)来调用它一次,以查询HWND的数量,以便在FILTERLIST (过滤 列表)中分配适当空间量。 MGM—SETPREFILTERCALLBACK此函数设置/注册外部图像过滤/縮放代码的回调函数。在光栅化GDI位图 被合成之前,放大引擎将对它们调用由该回调所指定的函数。该回调向该 放大引擎返回经处理的位图。 WPARAM: NULL (空)LPARAM: *(*FilterFunction)(HWND hwnd, HBITMAP *bm, SIZE *bs))—指向回调函数的指针。 Returns (返回)成功则为0 MGM_GETPREFILTERCA1XBACK返回经注册的回调函数。如果回调函数被注册,则该函数返回NULL。 WPARAM: NULL (空)LPARAM: NULL (空)Returns (返回)如果设置回调,则返回指向该 函数的函数指针,如果未设置回调,则返回NULL。MGM—SETCOLOREFFECTCAIXBACK此消息对外部图像色彩校正码设置/注册回调函数。由回调指定的函数将在 进行图像合成之后被调用。如果回调被注册,则合成位图将被传递到由回 调指定的函数。 WPARAM: NULL (空)LP ARAM: *(*FilterFunction)(HWND hwnd, HBITMAP *bm, SIZE *bs))))一指向回调函数的指针 Returns (返回)成功则为0 MGM—GETCOLOREFFECTCALLBACK返回经注册的回调函数。如果没有回调被注册,则函数返回NULL。 WPARAM: NULL (空) LPARAM: NULL (空)Returns (返回)如果设置回调,则返回指向该函数的指针,如果未设置回调,则返回NULL。 &r"c& (结构) TRANSFORM (转换)指定任意2D转换的3x3浮点(float)数组。typedef struct tagTRANSFORMfloat v[3][3]; } TRANSFORM, *PTRANSFORM; FILTERLIST (过滤列表)表示过滤模式的DWORD,以及指向待过滤的HWND列表的指针。 typedef struct tagFILTERLISTDWORD filterMode;HWND *hwndList; } F工TERLIST,叩FILTERUST; filterMode (过滤模式)可能的值为 MW—FILTERMODE—EXCLUDE不将hwndList (hwnd列表)中所列出的窗口中任一个渲染到放大器窗口中。MW_FILTERMODE—INCLUDE仅将hwndList (hwnd列表)中所列出的窗口渲染到放大器窗口中。 Magnificationlnitialize()BOOL Magnificationlnitialize();初始化放大库。这包括放大器窗口类将被注册。允许多次调用此API。每 次对Magnificationlnitialize的成功调用应当与对MagnificationUninitialize的调用相匹配。如果成功,则返回true (真)。 MagnificationUninitialize()BOOL MagnificationUninitialize();取消(uninitialize)初始化放大库。注销放大器窗口类。 如果放大未被初始化,则返回false (假)。 SetMagnifierWindowSourceBOOL SetMagnifierWindowSource(HWND hwnd, RECT rect);此API为放大器窗口设置源矩形。传递给该方法的hwnd是对放大窗口自 身。rect在桌面坐标中,并指定桌面被放大的区域。此矩形可跨越多个监 视器。如果操作成功,则返回true (真)。 GetMagnifierWindowSourceBOOL GetMagnifierWindowSource(HWND hwnd, RECT *pRect);为放大器窗口返回源矩形。传递给该方法的hwnd是对请求源矩形的放大窗口。矩形在桌面坐标中。如果操作成功,则返回tme (真)。 S etMagnifier Windo wTransformBOOLSetMagnifierWindowTransform(HWNDhwnd, TRANSFORM*pTransform);设置应用到源矩形用于输出的转换。通常这用于縮放输出。转换矩阵被指 定为浮点数组。此方法的基本用途是按特定因子縮放窗口。 转换矩阵,其中x表示縮放因子。[x00J [OxOJ [0 0 1 JGetMagnifierWindowTransformBOOL GetMagnifierWindowTransform(HWND hwnd, TRANSFORM *pTransform);返回应用到源矩形的转换。在调用方被分配的结构中返回结果。 如果操作成功,则返回true (真)。 SetMagnifierWindowFilterListBOOL SetMagnifierWindowFilterList(HWND hwnd, DWORD dwFilterMode, int count, HWND *pHWND)设置用于过滤的HWND列表。放大器窗口总是被滤除。此列表是要放大 的窗口的包括列表或要滤除的窗口的排除列表。 dwFilterMode可以是以下之一 MW—FILTERMODE一INCLUDE MW—FILTERMODE一EXCLUDE计数参数用于指定多少待滤除的HWND正被传递给该API。 如果操作成功,则返回true (真)。注意此函数的一个实现需要LDDM 启用视频卡;将对XPDM返回false (假)。 GetMagnifierWindowFilterListint GetMagnifierWindowFilterList(HWND hwnd, DWORD ^dwFilterMode, int count, HWND *pHWND)首先使用O计数进行Get (获取)操作,以获得总计数。 返回列表中的HWND的count (计数)。在+pdwFilterMode中返回过滤模 式。将count HWND复制到调用方被分配的HWND数组。 为了最初确定要传递给该方法的适当count (计数),用户应当传递O(零) 作为count (计数)参数。该调用的返回值是列表中HWND的数量,并且 可作为count参数用在对该方法的连续调用中。注意此函数的一个实现需要LDDM启用视频卡;将在XPDM上返回false (假)。SetMagnifierlmageFilterCallbackBOOL SetMagnifierlmageFilterCallback (HWND hwnd, void (*filter)(HWND hwnd, HANDLE bm, SIZE *bs));此函数对外部图像过滤/縮放代码设置/注册回调函数。在合成所有光栅化 GDI位图之前,放大器引擎将对它们调用该回调指定的函数。当回调经注 册的函数时,将句柄传递给视频存储器。期望回调函数使用硬件加速方法 来处理由句柄引用的图像。它们可将该图像转移到系统存储器并使用软件 加速对其进行处理,但这将影响放大应用的整体性能。在回调函数返回之后,视频存储器中的位图可具有两种可能的尺寸状态 未縮放一返回的位图与传递给调用方的位图的尺寸相同。然后,API将通 过向SetWindowTransform函数指定的TRANSFORM来进行縮放。 己縮放一返回的位图通过向SetWindowTransform函数指定的 TRANSFORM来縮放。此回调机制将允许第三方来实现定制图像过滤/縮放机制。过滤可包括三线 (tri-linear)、双三次(bi-cubic)、平坦和双线(bi-linear)过滤。此机制还启用边缘检测和增强。如果没有回调经由此函数来注册,则放大API将通过向 SetWindowTransform函数指定的TRANSFORM来縮放位图。 呈现系统(例如,Avalon)位图可使用平坦、双线、双三次过滤来自动縮 放,因此将不使用此回调机制。注意此函数的一个实现需要LDDM启用视频卡;将在XPDM上返回false "叚)。GetMagnifierlmageFilterCallbackvoid (*GetMagnifierImageFilterCallback (HWND hwnd))(HWND hwnd, HANDLE bm, SIZE *bs);返回经注册的回调函数。如果没有回调被注册,则该函数返回NULL(空)。 注意此函数需要LDDM启用视频卡;将在XPDM上返回false (假)。 SetMagnifierColorEffectsShaderBOOL SetMagnifierColorEffectsShader (HWND hwnd,LPDIRECT3DPIXELSHADER9 ps);此函数对外部图像色彩校正码设置/注册像素着色器。由ps指定的像素着 色器将在进行图像合成之后运行。如果像素着色器被注册,则将使用该像素着色器来在视频存储器中处理合成位图。此机制将允许第三方来实现诸如底片或高对比度的定制色彩校正和效果。如果操作失败,则函数返回false (假)。此函数需要LDDM启用视频卡。 将在XPDM上返回false (假)。 GetMagnifierColorEffectsShader (Beta 2)LPDIRECT3DPIXELSHADER9 GetMagnifierColorEffectsShader (HWND hwnd);返回经注册的像素着色器。如果没有像素着色器被注册,则该函数返回 NULL (空)。注意此函数的一个实现需要LDDM启用视频卡;将在XPDM上返回NULL (空)。结论虽然本发明易于进行各种更改和替代构建,但是在附图中示出了其特定说 明性实施例并在以上进行了详细描述。然而,应当理解,并非旨在将本发明限 于所公开的具体形式,相反,旨在覆盖落在本发明的精神和范围内的所有更改、 替代结构和等效方案。
权利要求
1.一种在计算环境中的系统,包括放大引擎,所述放大引擎具有包括至少一个接口的接口集合,其中应用程序能够经由所述接口耦合到放大程序。
2. 如权利要求l所述的系统,其特征在于,所述应用程序通过将放大窗口标 识到所述放大引擎来耦合到所述放大程序。
3. 如权利要求2所述的系统,其特征在于,所述放大引擎接收对应于所述放大窗口的消息,并将对应于这些消息的数据提供给所述放大程序用于输出数据的放 大。
4. 如权利要求l所述的系统,其特征在于,还包括选择窗口组件,从而仅处 理对应于一组被包括的源窗口的图形相关数据用于放大。
5. 如权利要求l所述的系统,其特征在于,还包括选择窗口组件,从而仅处 理对应于一组未被排除的源窗口的图形相关数据用于放大。
6. 如权利要求1所述的系统,其特征在于,所述放大引擎从图形流接收图形 元素,并且其中所述放大引擎耦合到用于将所述图形元素光栅化成位图的至少一个 光栅器。
7. 如权利要求6所述的方法,其特征在于,所述放大引擎在进行光栅化之前 更改所述图像元素的至少某些以实现放大。
8. 如权利要求6所述的方法,其特征在于,所述放大引擎在进行光栅化之前 更改所述图形元素的至少某些以实现放大和/或其它效果。
9. 如权利要求1所述的方法,其特征在于,所述放大引擎进行注册以接收窗 口消息。
10. —种具有计算机可执行指令的计算机可读介质,当执行所述指令时实现以 下步骤,包括接收对如由转换所更改地显示所显示的图形的区域的请求; 接收与针对所述区域的图形命令相对应的数据;以及 处理所述图形命令,从而程序指定输出区示出所述区域的经转换的表示。
11. 如权利要求10所述的计算机可读介质,其特征在于,还具有包括接收窗 口的标识符以获得所述程序指定输出区的计算机可执行指令。
12. 如权利要求IO所述的计算机可读介质,其特征在于,还具有包括接收被 包括在内以当落在所述区域内时其至少一部分被转换的至少一个窗口的集合的计 算机可执行指令。
13. 如权利要求IO所述的计算机可读介质,其特征在于,还具有包括接收当其至少一部分落在所述区域内时被拒绝进行转换的至少一个窗口的集合,以及从与 其对应的经转换输出滤除所述集合的每个窗口的计算机可执行指令。
14. 如权利要求IO所述的计算机可读介质,其特征在于,接收对如由所述转 换所更改地显示所显示的图形的区域的请求包括接收标识所述区域的数据和标识 所述转换的数据。
15. 如权利要求IO所述的计算机可读介质,其特征在于,接收对如由所述转 换所更改地显示所显示的图形的区域的请求包括接收标识所述区域的数据、接收标 识所述转换的数据、以及过滤对应于相关于其中内容的放大而被包括和/或排除的 至少一个窗口的集合的信息。
16. 如权利要求IO所述的计算机可读介质,其特征在于,处理所述图形命令 包括向至少一个放大组件提供所述命令以转换所述命令,从而所述命令的光栅化得 到经放大的输出。
17. 如权利要求10所述的计算机可读介质,其特征在于,处理所述图形命令 包括在向用于转换的组件提供位图之前将所述图形命令的至少一些光栅化成结果 位图。
18. —种在计算环境中的系统,包括图形服务器,从第一程序接收立即模式图形元素以及从第二程序接收保留模 式元素;耦合到所述图形服务器的放大引擎,所述放大引擎具有用于耦合到放大程序 的至少一个接口的接口集合;以及被耦合以与图形引擎通信的合成引擎,所述图形引擎向所述放大程序提供与 所述立即模式图形元素和所述保留模式元素相对应的至少一些数据,以便在发送到 用于组成包括放大输出的图形输出的所述合成引擎之前进行放大。
19. 如权利要求18所述的系统,其特征在于,还包括在最终通过所述合成引 擎构成所述图形输出之前通过至少一个效果来更改数据的效果组件。
20. 如权利要求18所述的系统,其特征在于,还包括在发送到所述合成引 擎之前将立即模式图形路由到光栅器的图像过滤器。
全文摘要
描述了将应用程序耦合到诸如放大程序的效果程序的引擎和API。例如,可放大源的内容以在输出区中查看。放大可通过将放大窗口标识到放大引擎来、标识要放大的源区、放大转换、以及诸如被包括来放大或从其排除的任何窗口的可能的过滤规则来完成。可接收对如由转换所更改地显示所显示的图形区域的请求,并且当收到与该区域相对应的图形命令时,处理该图形命令以显示该区域的经转换的表示。引擎和API可与立即模式图形元素(例如GDI命令)和保留模式图形元素(例如与渲染树相对应的元素)一起工作;合成引擎构成包括任何经放大的输出的输出。
文档编号G06F17/00GK101223518SQ200680025732
公开日2008年7月16日 申请日期2006年7月11日 优先权日2005年7月12日
发明者J·德泽扎, M·B·卡尔 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1