第15章 抗锯齿
直线近似由一系列位于显示器坐标的像素组成,因此它们会显示锯齿,除了那些接近于
水平或垂直线的直线。这种锯齿现象被称为图形失真。
抗锯齿是平滑的直线或曲线。它减少了锯齿现象,不完全是水平或垂直方向的任何直线
的阶梯现象。µC/GUI 支持不同的抗锯齿质量,抗锯齿字体和高分辨率坐标。
抗锯齿的支持是一个独立的软件项目,它不包括在µC/GUI 基本的软件包中。抗锯齿软件
位于子目录 GUI\AntiAlias 下。
µC/GUI 中文手册
第 1 页
15.1 介绍
第 15 章 抗锯齿
抗锯齿通过“混合”前景色和背景色来达到平滑曲线和斜线的效果。前景色和背景色之
间用到的阴影的数量越多,抗锯齿效果越佳(计算时间相应的也越长)。
抗锯齿的品质
抗锯齿的品质由函数 GUI_AA_SetFactor 设定。这在本章的后面部分介绍。对于在抗锯齿
和相应结果之间关系的概念,看一看所绘出的图片。
第一条直线在没有抗锯齿的情况下(抗锯齿系数为 1)绘出,第二条直线使用抗锯齿系数
2 绘出。这意思是从前景到背景的阴影数值为 2×2=4。下一条直线使用抗锯齿系数 3 绘出,
因此阴影数值为 3×3=9,以下类推。抗锯齿系数取 4 对于大多数应用来说应该是足够了,再
增大抗锯齿系数对于最终结果的影响并不显著,只会增加计算时间。
抗锯齿字体
支持两种类型的抗锯齿字体,低质量(2bpp)和高质量(4bpp)。当要使用它们的时候,
程序需要显示这些字体会自动连接。下表显示没有使用抗锯齿和使用两种抗饱锯齿字体分别
绘一个字符“C”的效果:
字体类型
黑色在白色上
白色在黑色上
标准
(无抗锯齿)
1 bpp
2 级阴影
第 2 页
µC/GUI 中文手册
第 15 章 抗锯齿
低质量
(抗锯齿)
2 bpp
4 级阴影
高质量
(抗锯齿)
4 bpp
16 级阴影
抗锯齿字体可以由µC/GUI 字体转换器建立。通常使用抗锯齿字体的目的是改善文字的外
观。虽然使用高质量抗锯齿的效果比低质量的抗锯齿更具视觉上的舒适性,但是相应的,它
也会占用更多的计算时间和消耗更多的内存。与非抗锯齿(1bpp)字体相比,低质量(2bpp)
字体消耗的内存是其两倍,而高质量(4bpp)字体消耗的内存是其 4 倍。
高分辨率座标
当使用抗锯齿进行一个项目绘制时,使用的座标与正常(非抗锯齿)的绘图函数的一样
的,这是默认模式。在函数参数中你不必考虑抗锯齿系数。例如,从(50, 100)到(100, 50)
绘一条抗锯齿直线,程序应当这样写:
GUI_AA_DrawLine(50, 100, 100, 50);
µC/GUI 的高分辨率特性让你使用由抗锯齿系数和显示屏尺寸所决定的虚拟区域。高分辨
率座标必须由函数 GUI_AA_EnableHiRes 启动,使用 GUI_AA_DisableHiRes 函数进行显示。这
两个函数在本章的后面部分说明。使用高分辨率座标的优点是对象不仅可以放置在显示屏的
物理坐标中,也可以放在这些物理坐标“中间”。下面展示了一个抗锯齿系数是 3 的高分辨率
像素虚拟区域。
µC/GUI 中文手册
第 3 页
第 15 章 抗锯齿
为了使用抗锯齿系数为 3 的高分辨率模式从像素(50,100)到(100,50)绘一条直线,
程序应当这样写:
GUI_AA_DrawLine(150, 300, 300, 150);
使用高分辨率特性的范例程序请参考本章最后的范例。
15.2 抗锯齿 API 函数
下表列出了µC/GUI 的抗锯齿软件包的有效函数,所有函数在各自的类型中按字母顺序进
行排列。函数的详细描述在后面列出。
控制函数
说 明
GUI_AA_DisableHiRes()
禁止高分辨率座标。
GUI_AA_EnableHiRes()
启用高分辨率座标。
GUI_AA_GetFactor()
返回当前的抗锯齿系数。
GUI_AA_SetFactor()
设置当前的抗锯齿系数。
第 4 页
µC/GUI 中文手册
第 15 章 抗锯齿
绘图函数
说 明
GUI_AA_DrawArc()
绘一段抗锯齿圆弧。
GUI_AA_DrawLine()
绘一根抗锯齿直线。
GUI_AA_DrawPolyOutline() 绘一个抗锯齿多边形的轮廓。
GUI_AA_FillCircle()
绘一个抗锯齿的圆。
GUI_AA_FillPolygon()
绘一个填充和抗锯齿的多边形。
15.3 控制函数
GUI_AA_DisableHiRes()
描述
禁止高分辨率座标。
函数原型
void GUI_AA_DisableHiRes(void);
附加信息
默认情况下,高分辨率座标被禁止。
GUI_AA_EnableHiRes()
描述
启用高分辨率座标。
函数原型
void GUI AA EnableHiRes(void);
GUI_AA_GetFactor()
描述
返回当前的抗锯齿品质系数。
µC/GUI 中文手册
第 5 页
函数原型
第 15 章 抗锯齿
int GUI_AA_GetFactor(void);
返回数值
当前的抗锯齿系数。
GUI_AA_SetFactor()
描述
设置当前的抗锯齿品质系数。
函数原型
void GUI_AA_SetFactor(int Factor);
参 数
Factor
含 意
新的抗锯齿系数
附加信息
尽管设置参数 Factor 为 1 是允许的,这将会禁止抗锯齿,导致使用一种标准字体。我
们还是推荐使用抗锯齿,其品质系数范围是 2~4。默认系数是 3。
15.4 绘图函数
GUI_AA_DrawArc()
描述
在当前窗口的指定位置,使用当前画笔大小和画笔形状显示一段抗锯齿的圆弧。
函数原型
void GUI_AA_DrawArc(int x0, int y0, int rx, int ry, int a0, int a1);
参 数
x0
y0
含 意
中心的水平坐标
中心的垂直坐标
第 6 页
µC/GUI 中文手册
第 15 章 抗锯齿
rx
水平半径
限制
现在 ry 参数无效,取而代之的是 rx 参数。
附加信息
如果工作在高分辨率模式,坐标和半径必须在高分辨率座标内否则,必须以像素值指定。
GUI_AA_DrawLine()
描述
在当前窗口的指定位置,使用当前画笔大小及画笔形状显示一条抗锯齿的直线。
函数原型
void GUI_AA_DrawLine(int x0, int y0, int x1, int y1);
参 数
x0
y0
含 意
起始 X 轴坐标。
起始 Y 轴坐标。
附加信息
如果工作在高分辨率模式,座标必须在高分辨率座标里面。否则,必须以像素值指定。
GUI_AA_DrawPolyOutline()
描述
在当前窗口的指定位置指定线宽,显示一个由一系列点组成的多边形的轮廓线。
函数原型
void GUI_AA_DrawPolyOutline ( const GUI_POINT* pPoint,
int NumPoints,
int Thickness,
int x, int y)
µC/GUI 中文手册
第 7 页
第 15 章 抗锯齿
参 数
PPoint
NumPoints
Thickness
含 意
显示的多边形的指针。
点的序列中指定点的数量。
轮廓的线宽。
附加信息
绘出的折线自动连接起点和终点而形成闭合。起始点不必重复指定为终点。如果工作在
高分辨率模式,座标必须在高分辨率座标里面。否则,必须以像素值指定。
范例
#define countof(Array)
(sizeof(Array) / sizeof(Array[0]))
static GUI_POINT aPoints[] =
{
}
{0,0},{15,30},{0,20},{-15,30}
void Sample (void)
{
}
GUI_AA_DrawPolyOutline(aPoints, countof(aPoints), 3, 150, 40);
上面范例程序执行结果的屏幕截图
GUI_AA_FillCircle()
描述
在当前窗口的指定位置显示一个填充和抗锯齿的圆。
函数原型
void GUI_AA_FillCircle(int x0, int y0, int r);
第 8 页
µC/GUI 中文手册