论文无忧网提供:计算机毕业论文范文|计算机毕业设计|计算机毕业论文
栏目导航 ASP JSP .NET VB6.0 JAVA VC VF DELPHI PB 计算机网络 计算机科学与技术 PHP 其他 代写论文
当前位置: www.50345.com > 计算机 > DELPHI >

(D)2(DELPHI)反走样技术的研究与实现

第一章   引 言

1.1研究背景 http://snowings.com

光栅图形显示器是目前使用最广泛的图形显示器,因为它具有以下优点:光栅扫描显示器具有固定的刷新顺序,扫描从屏幕的左上角开始,从左到右,从上到下的顺序进行刷新,从而刷新控制部件得以简化,节约了成本。在光栅显示系统中,构成图形的最小图形元素是像素,这样只要计算屏幕上位于给定区域以内的所有像素,并且赋予一定的颜色,就完成了图形的绘制。光栅显示器中的图形由像素构成,而每一个像素又可呈现出多级灰度或不同的颜色值,颜色丰富,显示出来的图形具有更好的视觉效果。光栅扫描显示器是一个画点设备,与图形的复杂度无关,刷新频率固定,因此不会象随机扫描显示器那样出现闪烁现象,人眼看上去更舒服。

内容来自论文无忧网 snowings.com

但光栅显示器也有它的缺陷,图形信号是连续的,而光栅显示系统中用来表示图形的却是一个个离散的像素。用离散的像素来表示连续的图形时会出现失真,也就称为走样,如图1.1所示。 paper51.com

paper51.com

图1.1锯齿状边界 copyright paper51.com

光栅显示系统为何会出现走样呢?光栅图形显示器是一个画点设备,被显示的线段、字符、图形及背景色都按像素点一一存储在帧缓冲存储器中。当我们要画一条直线时,它通常不可能完全精确地从一个可编址的像素点画一条直线到另一个可编址的像素点,只可能用尽可能靠近这条直线路径的像素点集来近似地表示这条直线。显然只有画水平线、垂直线时,像素点集在直线路径上的位置才是准确的,其他情况下的直线均或多或少地存在阶梯状(锯齿状)的现象。 http://snowings.com

光栅图形的走样现象除了上述锯齿状边界外,还有图形细节失真,狭小图形遗失等现象。

http://snowings.com

paper51.com

                        图1.2图形细节失真

内容来自论文无忧网 snowings.com

在光栅显示器上显示如图1.2(a)所示的细长矩形时,出现了图形细节失真,其结果如图1.2(b)所示,原细长的矩形被显示成了加宽的矩形。

paper51.com

http://snowings.com

图1.3 狭小图形的遗失

copyright paper51.com

由于光栅系统中表示图形的最小单位是一个像素,图形中那些比像素更窄的细节丢失了,这就出现了图形细节失真现象。在图1.3中,一些狭小的图形分布在两条扫描线之间,由于它不覆盖任何一个像素中心,故不会被显示出来。当这些狭小的图形进行运动时,覆盖像素中心时被显示出来,不覆盖像素中心时不被显示出来。这样在运动的过程中时隐时现,产生闪烁。

http://snowings.com

为了提高图形的显示质量,需要减少或消除上述走样现象。用于减少或消除这种走样现象的技术,称为反走样(Antialiasing)。

copyright paper51.com

研究如何消除或减缓这类走样现象,给人视觉上产生更舒适光滑的图形,在图形界面已成为人机交互主流方式的今天,具有一定的应用价值。 copyright paper51.com

    反走样技术能提高图形的显示质量,因此在很多画图软件中也采用了这种技术。优软电脑有限公司设计推出的新一代绘画程序---优软精灵画笔2.0,在原有的各种绘画功能上,添加了一系列全新设计的绘画工具;可以打开外来JPG,TAG,TIFF,GIF,BMP文件;更新三维立体窗口系统;对压力感应笔高效率支持,速度和流畅度达到专业软件水准,让用户的体会更加细腻逼真。它的精妙之处在于具有细笔尖反走样功能,所以使细笔画更细致更漂亮。

内容来自论文无忧网 snowings.com

    反走样技术不仅能提高图形显示质量,而且在反走样汉字方面也有很好的效果。由于汉字的笔画很多,而且大多数非水平非垂直,也会产生较严重的走样现象。图1.4中第1 个字为追踪出的轮廓,第2个为显示的原始矢量字符。第3 个为反走样处理后的矢量字符。

http://snowings.com

内容来自snowings.com

图1.4矢量字体轮廓的反走样

内容来自论文无忧网 snowings.com

由此可见,反走样技术在实际应用中有十分重要的意义。另外, 在处理纹理图形, 以及在动画中闪烁的细小物体图形等问题中反走样技术都得到了广泛运用。 copyright paper51.com

1.2编程实验环境 copyright paper51.com

    本文采用的实验环境的是C++Builder 6。C++ Builder由著名的Borland公司开发,是Windows环境下功能强大的可视化C++开发环境,它全面实现了ANSIC++标准,并提供了自己的扩展,并且兼容PC计算机上的两种最常用的C++编译器,即BorlandC++和VisualC++。Borland C++和VisualC++的程序几乎不用做任何修改,就可以在C++ Builder下编译、运行。下面主要介绍在论文中使用最频繁的、与图形图象处理密切相关的组件及其属性和方法。 内容来自论文无忧网 snowings.com

1.2.1 TColor 内容来自论文无忧网 snowings.com

在计算机图形处理软件中,通常颜色是根据红、绿、蓝三种颜色的饱和度来定义的,这种模型称为RGB模型。任何颜色都是红、绿、蓝三种基本色的不同组合组成,因此每种颜色都可以用红、绿、蓝基本色来表示。Red、Green、Blue用来表示基本色构成的三个分量,他们的取值为0-255,最小值表示没有颜色,最大值255表示最高的饱和度。

paper51.com

   TColor类型用于定义一个对象的颜色,很多组件的颜色属性就是TColor类型。同时C++ Builder定义了一些常用的颜色常量,可在程序中直接使用。比如clRed,clGreen等。 http://snowings.com

  

http://snowings.com

1.2.2TCanvas paper51.com

在C++ Builder中提供了一个TCanvas对象,它封装了Windows应用程序在图形输出方面所需要的大多数GDI对象和绘图命令。在这个区域上,程序可实现各种绘图功能,很多图形组件(如TImage、TPaintBox)的画布(Canvas)属性都是一个TCanvas对象。 http://snowings.com

    TCanvas的属性和方法很多,最常用的有: 内容来自论文无忧网 snowings.com

l       TCanvas的属性

paper51.com

(1)Pixels属性 内容来自论文无忧网 snowings.com

   Canvas的Pixels属性可以用来去顶像素的颜色。可以利用Pixels属性来获得某一点的颜色值,也可以通过它来设置某一点的颜色值,这个属性在反走样算法中起了相当重要的作用。 http://snowings.com

    如要获得坐标(20,20)的颜色值,可以使用下面的代码:

paper51.com

    TColorColor;

http://snowings.com

   Color=Canvas->Pixels[20][20];

内容来自论文无忧网 snowings.com

如果要将坐标点(10,20)的颜色设置为红色,可以使用如下代码:

内容来自snowings.com

Canvas->Pixels[10][20]=clRed; copyright paper51.com

(2)画笔属性

http://snowings.com

   TCanvas的画笔(Pen)属性是一个TPen对象。在用画布划线的时候,需要设置画笔的属性。对每一个画笔均可以选择不同的宽度,颜色,线型。我的论文中用到了颜色(Color)属性。 内容来自论文无忧网 snowings.com

    该属性用于控制线的颜色,可以使用预定义的颜色或设置自己的颜色,例如: http://snowings.com

      Canvas->Pen->Color=clBlue; 内容来自snowings.com

      Canvas->Pen->Color=TColor (RGB(125,0,0)); http://snowings.com

(3)画刷属性 http://snowings.com

    Canvas的画刷(Brush)属性是一个TBrush对象,它封装了标准的Windows刷子对象。画刷可以利用颜色和图案来填充矩形、多边形和圆等。使用画刷的Color属性可以设置画刷的颜色,默认的画刷颜色是clWhite。例如: paper51.com

     Canvas->Brush->Color=clRed;

copyright paper51.com

这个属性在清屏方法起着主要作用。 内容来自snowings.com

(4)ClipRect属性 内容来自snowings.com

    ClipRect属性用于定义一个画图的矩形区域.在定义了一个剪切区域后,即使画的图形大于这个ClipRect,也不会画到这个区域的外面,同时FillRect属性可以用来填充矩形区域的颜色。 copyright paper51.com

l        TCanvas的方法 copyright paper51.com

    (1)画直线

paper51.com

绘制直线涉及到两个方法:MoveTo和LineTo。MoveTo(intstartx,int starty)的任务是设置当前画笔的位置到(startx,starty),而不进行任何绘图工作。然后可以调用LineTo(int endx,intendy)来画直线。它从当前画笔的位置画一条直线到点(endx,endy),并将当前的画笔位置改变为(endx,endy)。

paper51.com

(2)画椭圆弧线 内容来自论文无忧网 snowings.com

绘制椭圆弧线的方法比绘制直线方法要复杂一些。下面是最基本的椭圆弧线绘制函数: paper51.com

Arc(int X1, int Y1, int X2, int Y2, int X3, int Y3, int X4, int Y4); http://snowings.com

Arc方法画一段椭圆弧,椭圆由(X1,Y1),(X2,Y2)两点所确定的矩形所决定。弧的起点是椭圆圆周和椭圆中心与(X3,Y3)连线的交点。弧的终点是椭圆圆周和椭圆中心与(X4,Y4)连线的交点,以逆时针方向画弧。在位图的反走样算法中所画的弧线都是由该函数实现的。

http://snowings.com

    (3)绘制矩形

内容来自论文无忧网 snowings.com

    Rectangle的具体形式如下:

paper51.com

Rectangle(int X1, int Y1, int X2, int Y2); http://snowings.com

    Rectangle方法是在画布上用当前画刷绘制矩形,其中(X1,Y1)是矩形的左上角,(X2,Y2)是矩形的右下角。如果设置Brush的Style模式为bsClear,则可以绘制未填充的矩形。同时在论文中经常会用到清屏这个功能,它就是调用了FillRect方法,它是用指定的画刷填充矩形,并且绘制的矩形没有边框。具体形式如下:

内容来自论文无忧网 snowings.com

FillRect(const windows::TRect &Rect);

paper51.com

第二章  反走样技术概述

copyright paper51.com

在光栅显示器上显示图形时,直线段或图形边界或多或少会呈锯齿状。原因是图形信号是连续的,而在光栅显示系统中,用来表示图形的却是一个个离散的象素。这种用离散量表示连续量引起的失真现象称之为走样(aliasing),走样是伴随着光栅显示系统而出现的,也是数字化的必然产物。用于减少或消除这种效果的技术称为反走样(antialiasing)。 http://snowings.com

第一章中已经介绍了光栅图形的走样现象除了阶梯状的边界外,还有图形细节失真(图形中的那些比象素更窄的细节变宽),狭小图形遗失等现象。常用的反走样方法主要有:提高分辨率、区域采样和加权区域采样等。下面将对他们进行介绍。 copyright paper51.com

2.1 过取样技术

内容来自论文无忧网 snowings.com

反走样的方法很多,一种简单的反走样方法是以较高的分辨率显示对象,如图2.1。假设把显示器分辨率提高一倍,直线经过两倍的象素,锯齿也增加一倍,但同时每个阶梯的宽度也减小了一倍,所以显示出的直线段看起来就平直光滑了一些。这种反走样方法是以4倍的存储器代价和扫描转换时间获得的。因此,增加分辨率虽然简单,但是不经济的方法,而且它也只能减轻而不能消除锯齿问题。但是它的思想给我们以后的反走样方法一定的启示。

内容来自snowings.com

paper51.com

图2.1  提高显示分辨率

copyright paper51.com

一种可行的反走样方法:在较高分辨率下用点取样方法计算,然后对几个像素的属性进行平均得到较低分辨率下的像素属性。这种技术称为过取样(Supersampling),或后滤波(Postfiltering)。该技术是把显示器看成是比实际更细的网格来增加取样率,然后根据这种更细的网格使用取样点来确定每个屏幕像素合适的亮度等级。 copyright paper51.com

 反走样的另一种方法是根据图形对象在每个像素点上的覆盖程度率来确定像素点的亮度,这种计算覆盖率的反走样技术称为区域取样(Area Sampling),或前滤波(Prefiltering)。

paper51.com

2.1.1 提高分辨率方法

copyright paper51.com

过取样方式的一个简单实现是用较高的分辨率进行计算,如图2.2,在x方向和y 方向上把分辨率提高一倍,使每个像素都对应4个子像素,然后扫描转换求得各子像素的颜色亮度,在对4个像素的颜色亮度进行平均,得到较低分辨率下的像素颜色亮度。由于像素中可供选择的子像素最大数目是4,因此,该例中提供的亮度等级数是5。如图2.2中,编号为1和7的像素亮度级别是1,编号为2,3,4,5和6的像素亮度是2。通过这个方法为图中的每个像素设定不同的灰度值,可以使显示出来的直线看起来平滑一些,达到减少走样现象。

http://snowings.com

 

paper51.com

------分隔线----------------------------
联系方式