基于AGG算法库的通用图形接口设计
- 格式:pdf
- 大小:195.07 KB
- 文档页数:5
基于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中的坐标单位
AGG支持亚像素精度(subpixel accuracy),因此接受浮点数值的矢量坐标输入,坐标的小数部分将发挥作用。
2 通用图形接口GGI(General Graphics Interface)设计
本文介绍的通用图形接口命名为GGI(General Graphics Interface)。
它封装了AGG库,提供一系列图形操作接口。
普通操作系统的图形设备接口,如Windows平台下的GDI,扮演着应用程序与设备之间桥梁的角色。
其功能可以理解为图形操作和与设备交互两部分[3]。
GGI是图形设备接口的一个子集,它与应用程序交互,完成图形操作,并把最终的结果交给系统的设备接口,完成输出。
GGI的设计与实现,解决了存在于跨平台图形操作中的问题。
首先GGI提供了对多种基本图元的支持,这包括直线、折线、矩形、多边线、椭圆、圆弧、扇形、曲线、文本、图像等。
其中直线、折线、多边线不占据矩形区域,由一组点序列控制;矩形、椭圆通过其外接矩形表示;圆弧、扇形等则由外截矩形以及起始角度和中心角扫过的角度进行表示。
其次,GGI及其底层实现AGG库都采用标准的C、C++进行编写,这赋予了GGI跨平台的能力。
第三,作为GGI底层实现的AGG库应用了反走样及亚像素技术,制造出赏心悦目的视觉效果,因此可以满足各类对图形绘制效果有较高要求软件的需求。
最后,GGI提供与GDI+相似的接口,实现接口统一的同时也便于开发人员使用。
2.1 GGI的体系结构
GGI的体系结构以Graphics为中心,所有的图形操作功能都围绕它展开。
图2-1展示了其体系结构。
图2-1 GGI的体系结构
(1) Graphics——GGI的中心。
它描述了绘制图形的环境(内存区域的属性),并定义绘图的方法和属性。
通过指定一块内存区域的尺寸来构造一个Graphics对象。
所有的绘制线条与填充都通过Graphics对象进行,表2-1展示了Graphhics类提供的绘图方法
方法描述方法描述
DrawLine 绘制直线 DrawBezier 绘制贝塞尔曲线DrawLines 绘制折线 DrawString 绘制字符串DrawRectangle 绘制矩形 DrawImage 绘制图像
DrawArc 绘制圆弧 FillRectangle 填充矩形
DrawEllipse 绘制圆或椭圆 FillEllipse 填充圆或椭圆
DrawPie 绘制扇形 FillPie 填充扇形
DrawPolygon 绘制多边形 FillPolygon 填充多边形DrawCurves 绘制基数样条 FillClosedCurves 填充封闭基数样条DrawClosedCurves绘制封闭基数样条FillPath 填充路径
表2-1 Graphics类的绘制填充方法
(2) Pen——用于绘制直线,曲线以及图形的轮廓。
Pen对象具有颜色、线宽以及线样式等属性。
通过设置线样式,能够用不同的虚线进行绘制。
(3) Brush——用于进行填充。
Brush是一个抽象基类,它派生出实心画笔(SolidBrush)、线性渐变画笔(LinearGraidentBrush)和纹理画笔(TextureBrush)三个子类,实现实心填充、渐变填充和纹理填充。
(4) Font——支持truetype字体的基本操作。
(5) Matrix——用于进行仿射变换,对矩阵进行旋转、缩放和平移操作。
(6) Image——定义图像的基本操作。
(7) GraphicsPath——定义了GGI中的路径及其操作。
路径是指一组相互连接的图元,如直线、曲线、矩形、椭圆或文本等。
2.2 GGI对AGG的封装
GGI实现部分对AGG的封装,主要在Graphics类中完成。
Graphics类对AGG体系结构中的栅格化扫描线、绘制控制器、像素格式、绘制缓存进行了封装。
与此同时,Graphics 需要将矢量点序列变换为各种图形,这需要封装坐标转换通道。
Graphics对坐标转换通道的封装包括:用于生成曲线的曲线生成器,用于生成线段的线段生成器,用于进行仿射变换的仿射变换器,用于生成虚线的虚线生成器。
GraphicsPath类封装了AGG中的矢量点序列层,通过各类Add方法(如AddLine,AddEllipse等),从开发人员获取点序列,并将其转化为AGG所识别的输入。
对Font、Matrix和Image三类封装相对直接,AGG库中能分别找到与之对应的类。
对于Font类,AGG封装了FreeType2库[5],提供了对truetype字体的支持;Matrix类对应于AGG库中的仿射变换类;Image类对应于AGG库中的Image类。
Pen、Brush类记录如颜色、宽度等属性值,未对AGG库进行封装。
3 应用实例
在Windows平台和WinCE平台分别使用GGI进行绘图。
图3.1显示Windows和WinCE 平台下,GGI的绘制填充效果:
4 结束语
综上所述,本文在对AGG(Anti-Grain Geometry)库进行介绍的同时,设计实现了一套基于AGG的通用图形接口。
通用图形接口的设计与实现,对于进行跨平台开发软件的开发人员具有借鉴意义和实用价值。
本文作者创新点:设计并实现了一套具有统一规范的、完善的、跨平台的二维图形接口。
应用特殊算法进行反走样处理,使图形的质量得到了保证。
参 考 文 献:
[1] 张玲, 陈元春, 孙勇. 基于GDI+的通用图形平台设计[J]. 计算机工程, 2005, 31(12),
218-220.
[2] 文江, 朱宝山, 蔡文涛, 李韶芳. 基于PDA的矢量图形的快速显示[J]. 微计算机信息2007, 2-2, 75-76.
[3] Maxim Shemanarev. AGG Reference Manual. [EB/OL].
/doc/index.html
[4] Mahesh Chand. GDI+图像程序设计[M]. 电子工业出版社,2005.
[5]The Team of FreeType2. The FreeType2 Project. [EB/OL].
/freetype2/index.html
作者简介:鲁力(1984-):男,汉族,重庆人,华北计算技术研究所硕士研究生,计算机应用技术,研究方向为地理信息系统。
导师简介:李欣(1971—):男,汉族,山东人,硕士,华北计算技术研究所高级工程师,研究方向为地理信息系统。
图3-1 Windows和WinCE平台下GGI的绘制与填充
Biography: Lu Li(1984-), Male, Han, Chongqing, Graduate Student in the North China Institute of Computing Technology , Computer Application Technology, Geographic Information System. Tutor: Li Xin(1971-), Male, Han, Shandong, Master, Senior Engineer in the North China Institute of Computing Technology, Geographic Information System.。