基于AGG算法库的通用图形接口设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于AGG算法库的通用图形接口设计
鲁力 李欣
(华北计算技术研究所,北京,100083)
摘要: 随着计算机技术的发展和各类嵌入式设备的广泛使用,设计跨平台软件已经成为迫切的需要。图形接口在跨平台软件开发中扮演着重要的角色。文章对二维图形算法库AGG(Anti-Grain Geometry)进行介绍,并基于AGG设计实现了一套通用图形接口,在提供高质量的二维绘图效果的同时,消除了不同操作系统图形接口存在的差异,为各种应用系统提供统一的接口规范。
关键字: AGG(Anti-Grain Geometry),图形接口,反走样,亚像素精度
中文分类号:TP317.4文献标识码:A
AGG (Anti-Grain Geometry) based Platform-Independent Graphics
Interface Design
Lu Li Li Xin
(North China Institute of Computing Technology, Beijing 100083)Abstract: With the development of Computer Technology and the spreading of varieties of embedded equipments, the need to design platform-independent software has been urgent. The Graphics Interface never fails to play an important role in the platform-independent software development. This paper introduces the Anti-Grain Geometry Graphics Library and an AGG based Graphics Interface, which not only provides high quality 2D graphics but also enables programmers to ignore the various graphics interfaces of different operating systems by designing and implementing a set of standardized and unified ones.
Key Words:AGG(Anti-Grain Geometry),Graphics Interface,Anti-Aliasing,Subpixel Accuracy
0引言
许多软件的设计与实现,都依赖于操作系统提供的图形接口。不同操作系统图形接口存在差异,为软件的跨平台设计提出了挑战。这种差异主要表现在三个方面:(1)接口在形式上的不一致性。
(2)对于图元(图形的最小组成和编辑单位[1])进行抽象和描述时的不统一。比如,windows平台下的GDI或GDI+把样条曲线,贝塞尔曲线作为图元进行描述,但某些操作系统并不支持这两种图元的实现。
(3)各操作系统图形接口的绘制效果存在差异。一些嵌入式操作系统的图形接口不能进行反走样处理,造成明显的锯齿效应,从而无法满足较高的图形显示需求(如:基于PDA 的移动GIS系统[2])
因此,无论对接口形式还是图元,都需要进行统一的描述,并提供优美的绘制效果。
1 AGG算法库简介
1.1 概述
AGG是一个开源的二维图形引擎。它提供一套结合了亚像素(subpixel accuracy)技术与反走样(anti-aliasing)技术的图形算法,实现高效率、高质量的二维图形处理功能。
AGG采用C++和标准的C运行时函数(Standard C Runtime Function)进行编写。这赋予了AGG良好的跨平台能力。
AGG的另一个特点在于它极大的灵活性。其作者将它描述为“创建其它工具的工具”
[3]。AGG提供一系列松耦合的算法,而且其所有类均采用模板(template)进行描述,开发者可以自由地组合、改写、替换其中部分或全部算法,以满足其具体的图形操作需求。
1.2 AGG的基本概念
1.2.1 AGG的层次结构
图1-1显示了AGG的层次结构,分别为:
(1)矢量点序列——有序的点的集合。它记录每个点的坐标以及控制信息。点的坐标信息刻画了点在坐标系中的位置;点的控制信息提示点的属性,区分不同的点:如起点或终点;直线的端点或曲线的控制点。
图1-1 AGG的层次结构
(2)坐标转换通道——将矢量点序列转换成各种几何对象的工具的集合。坐标转换通道由一组坐标转换器组成。常用的坐标转换器有:仿射变换转换器(affine transformer),通
过它可以进行仿射变换;轮廓生成器(outline generator),它产生依次连接各矢量顶点的线段;特殊标记生成器(marker generator),它在指定的坐标处产生箭头、箭尾等特殊标记符号;虚线生成器(dash generator),它产生依次连接各顶点的虚线。
(3)栅格化扫描线——将描述各种几何对象的矢量顶点序列转化为水平扫描线序列的
工具的集合。这一层由扫描线(scanline)和栅格化控制器(rasterizer)两部分组成。扫描线填充图形操作区域,是一组水平的像素点的集合。用扫描线填充区域的操作由栅格化控制器进行
控制。AGG中有三种形式的扫描线(scanline),分别为未打包的扫描线(scanline_u),打包的扫描线(scanline_p),普通扫描线(scanline_bin)。其中scanline_bin不进行反走样处理,
另外两种扫描线则应用了反走样技术。scanline_p与scanline_u的区别源于AGG进行反走样处
理的方式。AGG通过计算每个像素点颜色的权值(coverage)实现反走样。按有无权值分类,扫描线上的点可以分为反走样点(有权值点)和普通点(没有权值)。同一条扫描线上,相邻的反走样点的集合称为反走样跨距(aa_span),相邻的普通点的集合称为实体跨距
(solid_span)。scanline_p区分这两种不同的跨距,对于实体跨距(solid_ span)只记录一次
权值;而scanline_u则没有做这样的区分,依次记录每个像素点的权值。
(4)绘制控制器——控制颜色信息,在扫描线和像系格式间架起桥梁。
(5)像素格式——以像素为单位对绘制缓存进行描述。不同的视频系统常常具有不同的像素格式,比如有的使用24bit R-G- B格式,有的使用32bit R-G-B-A格式,或是使用15bit
R-G-B格式。像素格式使这种差异对于上层的绘制控制器变得不可见。
(6)绘制缓存——对应于内存中的某个区域,它最后将被输出到显示终端。
(7)屏幕输出。
1.2.2 AGG中的颜色
AGG库并非通过建立颜色(color)类或结构体来描述颜色,而是通过颜色空间的概念,如RGB,HSV,CMYK来实现对颜色的表示。每一种像素格式都存在于某种特定的颜色空间
下。这主要是出于灵活性与可扩展性的考虑。目前为止AGG提供了RGB颜色空间中的28种像素格式供使用。
1.2.3 AGG中的坐标单位