一种多线宽线段绘制反走样处理方法与流程

文档序号:29494912发布日期:2022-04-06 14:50阅读:126来源:国知局
一种多线宽线段绘制反走样处理方法与流程

1.本发明涉及图形图像处理领域,具体为一种适合嵌入式系统使用的多线宽线段绘制反走样处理方法,支持非整数线宽线段的绘制和反走样处理。


背景技术:

2.近年来,在机载嵌入式领域,小屏幕绘图需求越来越广泛,常见的与用户交互的设备都带交互小屏幕。此类设备有一定的显示需求,但是对显示的帧率要求不高,使用专用显示芯片将会增加功耗、体积和成本,因此一般使用单片机或者cpu直接进行图形的绘制,而绘制直线则是最为基础的部分。
3.嵌入式系统cpu计算能力相对于通用cpu要弱很多,因此绘制线段的算法在保证显示效果的情况下,速度要尽可能的快。目前公认的绘制直线最快的算法为bresenham算法,但是其仅仅支持单线宽(即线宽为一个像素),虽然可以通过绘制多条相邻线段来支持整数多线宽,但该方法不支持反走样,绘制出来的线段存在锯齿,显示效果较差,无法满足显示需求;而常用的快速反走样算法:wu反走样算法,虽然显示效果不错,但仅仅是针对单线宽的反走样,没有涉及到多线宽,且无法通过绘制多条相邻线段拼凑的方法实现多线宽线段的绘制。
4.因此,需要针对嵌入式系统设计一种多线宽且支持小数线宽的反走样算法,以满足实际应用需要。


技术实现要素:

5.为解决现有技术存在的问题,本发明提出一种多线宽线段绘制反走样处理方法,包括以下步骤:
6.步骤1:获取要绘制的线段起点坐标(x0,y0)和终点坐标(xn,yn),计算线段的斜率k,确定是否满足斜率k∈(0.0,1.0)且x0不大于xn的条件,若满足,则进行之后步骤,若不满足,则对线段起点坐标和终点坐标进行预处理,使其满足上述条件;
7.步骤2:确定起始点(x0,y0)及附近点的亮度系数:
8.以线宽m为基准,计算出(x0,y0)上下各个点的亮度系数,亮度系数的计算方法为:
9.当m为1.0时,仅计算(x0,y0)一个点,亮度系数为1.0;
10.当m∈(1.0,3.0]时,计算(x0,y
0-1)(x0,y0)(x0,y0+1)三个点,系数分别为(m-1.0)/2.0,1.0,(m-1.0)/2.0;
11.当m∈(3.0,5.0]时,计算(x0,y
0-2)(x0,y
0-1)(x0,y0)(x0,y0+1)(x0,y0+2)五个点,系数分别为(m-3.0)/2.0,1.0,1.0,1.0,(m-3.0)/2.0;
12.当m∈(5.0,7.0]时,计算(x0,y
0-3)(x0,y
0-2)(x0,y
0-1)(x0,y0)(x0,y0+1)(x0,y0+2)(x0,y0+3)七个点,系数分别为(m-5.0)/2.0,1.0,1.0,1.0,1.0,1.0,(m-5.0)/2.0;
13.当m∈(7.0,9.0]时,计算(x0,y
0-4)(x0,y
0-3)(x0,y
0-2)(x0,y
0-1)(x0,y0)(x0,y0+1)(x0,y0+2)(x0,y0+3)(x0,y0+4)九个点,系数分别为(m-7.0)/2.0,1.0,1.0,1.0,1.0,1.0,
1.0,1.0,(m-7.0)/2.0;
14.当m∈(9.0,11.0]时,计算(x0,y
0-5)(x0,y
0-4)(x0,y
0-3)(x0,y
0-2)(x0,y
0-1)(x0,y0)(x0,y0+1)(x0,y0+2)(x0,y0+3)(x0,y0+4)(x0,y0+5)十一个点,系数分别为(m-9.0)/2.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,(m-9.0)/2.0;
15.依此类推,当m∈(m1,m2]时,计算(x0,y
0-(m1+m2)/4)(x0,y
0-(m1+m2)/4+1)

(x0,y
0-1)(x0,y0)(x0,y0+1)

(x0,y0+(m1+m2)/4-1)(x0,y0+(m1+m2)/4)共m2个点,系数分别为(m-m1)/2.0,1.0,

,1.0,(m-m1)/2.0;
16.步骤3:假设x=xm时,xm为起点与终点之间某一点的x坐标,对应y方向上亮度系数不为0的点中:y值最大的点的坐标为(xm,ym+p),亮度系数为a,y值最小的点的坐标为(xm,ym+q),亮度系数为b;
17.则点(x
m+1
,ym+q)的亮度系数为max(0.0,b-k),(x
m+1
,yn+q+1)亮度系数为1.0+min(0.0,b-k),(x
m+1
,ym+p)亮度系数为min(1.0,a+k),(x
m+1
,ym+p+1)亮度系数为max(0.0,a+k-1.0);(x
m+1
,ym+q+2)到(x
m+1
,ym+p-1)点的亮度系数为1.0;
18.步骤4:基于步骤2确定的起始点(x0,y0)及附近点的亮度系数,将初始条件x=x0带入步骤3中,计算出x=x1时,点(x1,y1)附近点的亮度系数,重复步骤3的计算过程,计算出从起始点(x0,y0)到终止点(xn,yn)所有点的亮度系数。
19.有益效果
20.本发明提出的多线宽线段绘制反走样处理方法,支持线宽的设定,范围为[1.0,10.0],可设置带小数的数值。计算过程没有求平方根等复杂运算,仅使用cpu或者单片机即可,不需要显示核心,减少了设备的体积功耗。
[0021]
本发明的附加方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。
附图说明
[0022]
本发明的上述和/或附加的方面和优点从结合下面附图对实施例的描述中将变得明显和容易理解,其中:
[0023]
图1是线段示意图。
[0024]
图2是反走样处理流程图。
具体实施方式
[0025]
本发明设计了一种多线宽线段绘制反走样处理方法,在满足显示效果的情况下,支持非整数线宽,并解决了偶数线宽用线段拼凑圆、曲线时的错位问题。可用于opengl的底层线段算法,而且该方法不需要显示芯片,减少了硬件电路的设计难度与资源开销,适用于嵌入式系统。
[0026]
由于线段的对称性,为了方便描述,下面的描述仅讨论斜率在(0,1)范围内,x轴起点坐标不大于终点坐标的情况;其他情况皆可以通过预处理来转换:
[0027]
当斜率在[1,+∞)时,可以通过交换x、y坐标来绘制;
[0028]
当斜率在(-1,0]时,可以通过改变y坐标由递增改为递减来绘制;
[0029]
当斜率在(-∞,-1]时,可以通过交换x、y坐标并改变y坐标由递增改为递减来绘
制;
[0030]
当x轴起点坐标大于终点坐标时,可以交换起点坐标和终点坐标来绘制。
[0031]
使用的输入数据为起始点整数坐标(x0,y0)、终止点整数坐标(xn,yn)、线宽m∈[1.0,10.0],其中线宽m=1表示线宽为1个像素,本发明中m可以为小数;输出为计算出每个点的亮度系数s∈[0.0,1.0],获取亮度系数后,根据不同的色彩类型,乘以对应的系数即可计算出对应点的颜色值,由于不同的系统,颜色类型不同,这里仅仅描述亮度系数。具体步骤如下:
[0032]
1、根据提供的线段两个端点坐标,计算出直线的斜率k,k∈(0.0,1.0);
[0033]
2、确定起始点(x0,y0)及附近的亮度系数,以线宽m为基准,计算出(x0,y0)上下各个点的亮度系数,亮度系数的计算方法为:
[0034]
当m为1.0时,仅计算(x0,y0)一个点,亮度系数为1.0;
[0035]
当m∈(1.0,3.0]时,计算(x0,y
0-1)(x0,y0)(x0,y0+1)三个点,系数分别为(m-1.0)/2.0,1.0,(m-1.0)/2.0;
[0036]
当m∈(3.0,5.0]时,计算(x0,y
0-2)(x0,y
0-1)(x0,y0)(x0,y0+1)(x0,y0+2)五个点,系数分别为(m-3.0)/2.0,1.0,1.0,1.0,(m-3.0)/2.0;
[0037]
当m∈(5.0,7.0]时,计算(x0,y
0-3)(x0,y
0-2)(x0,y
0-1)(x0,y0)(x0,y0+1)(x0,y0+2)(x0,y0+3)七个点,系数分别为(m-5.0)/2.0,1.0,1.0,1.0,1.0,1.0,(m-5.0)/2.0;
[0038]
当m∈(7.0,9.0]时,计算(x0,y
0-4)(x0,y
0-3)(x0,y
0-2)(x0,y
0-1)(x0,y0)(x0,y0+1)(x0,y0+2)(x0,y0+3)(x0,y0+4)九个点,系数分别为(m-7.0)/2.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,(m-7.0)/2.0;
[0039]
当m∈(9.0,10.0]时,计算(x0,y
0-5)(x0,y
0-4)(x0,y
0-3)(x0,y
0-2)(x0,y
0-1)(x0,y0)(x0,y0+1)(x0,y0+2)(x0,y0+3)(x0,y0+4)(x0,y0+5)十一个点,系数分别为(m-9.0)/2.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,(m-9.0)/2.0;
[0040]
3、假设x=xm时,xm为起点与终点之间某一点的x坐标,对应y方向上亮度系数不为0的点中:y值最大的点的坐标为(xm,ym+p),亮度系数为a,y值最小的点的坐标为(xm,ym+q),亮度系数为b;则点(x
m+1
,ym+q)的亮度系数为max(0.0,b-k),(x
m+1
,yn+q+1)亮度系数为1.0+min(0.0,b-k),(x
m+1
,ym+p)亮度系数为min(1.0,a+k),(x
m+1
,ym+p+1)亮度系数为max(0.0,a+k-1.0);(x
m+1
,ym+q+2)到(x
m+1
,ym+p-1)点的亮度系数为1.0;
[0041]
4、由于初始条件x=x0时,(x0,y0)附近点的亮度系数已知,带入第3步中,即可计算出x=x1时(x1,y1)附近点的亮度系数,重复第3步的计算过程,即可计算出从起始点(x0,y0)到终止点(xn,yn)所有点的亮度系数。
[0042]
尽管上面已经示出和描述了本发明的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本发明的限制,本领域的普通技术人员在不脱离本发明的原理和宗旨的情况下在本发明的范围内可以对上述实施例进行变化、修改、替换和变型。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1