网站导航网学 原创论文 网站设计 最新系统 最新研究 原创论文 获取论文 论文降重 发表论文 论文发表 UI设计定制 论文答辩PPT格式排版 期刊发表 论文专题
返回网学首页
网学原创论文
最新论文 推荐专题 热门论文 论文专题
当前位置: 网学 > 设计下载 > 其他类别 > 正文

反走样技术的研究与实现

来源:http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 13/05/06

网学网为需要其他类别的朋友们搜集整理了反走样技术的研究与实现相关资料,希望对各位网友有所帮助!

QQ交谈客服咨询,网学网竭诚为您服务,本站永久域名:myeducs.cn

3.2.2算法的实现

    算法首先分析圆的特殊性,也就是圆具有八对称性,在画圆的同时进行反走样。

    总之,算法充分利用圆的八对称性,以加权过取样算法基础,具体实现如下:

1)  显示圆的八个对称点函数

   void CirclePoints(int x,int y,TColor color)

{

PutPixel(x,y,color);

PutPixel(y,x,color);

PutPixel(-y,x,color);

PutPixel(-x,y,color);

PutPixel(y,(-x),color);

PutPixel(x,(-y),color);

PutPixel(-x,(-y),color);

PutPixel(-y,(-x),color);

}

2)  以加权过取样算法为基础实现反走样圆

   for(int i=1,ty=r->Value;i<=pts[0]-1;i++,ty--) {

        x1= (Form1->Image1->Width/2)+pts[i];

        x2= (Form1->Image1->Width/2)+pts[i+1];

        fx1= (Form1->Image1->Width/2)-pts[i];

        fx2= (Form1->Image1->Width/2)-pts[i+1];

        y=(Form1->Image1->Height/2)-ty;

        fy=(Form1->Image1->Height/2)+ty;

        SuperSamplingLine(x1,y,x2,y,true);

        SuperSamplingLine(y,x1,y,x2,true);

        SuperSamplingLine(fy,x1,fy,x2,true);

        SuperSamplingLine(fx2,y,fx1,y,true);

        SuperSamplingLine(y,fx2,y,fx1,true);

        SuperSamplingLine(x1,fy,x2,fy,true);

        SuperSamplingLine(fx2,fy,fx1,fy,true);

        SuperSamplingLine(fy,fx2,fy,fx1,true);

}   

 

下图3.3是圆反走样算法的部分效果实现图:

3.3圆反走样效果

3.3 位图反走样

3.3.1实现原理

对位图进行反走样,原理很简单,就是将原图放大三倍以后进行像素点间的平均操作,也就是目标像素点周围的8个像素点加上自己这个像素点共9个像素点的红色分量的总和,然后取平均值,在赋给目标像素中的红色分量。同理,绿色分量和蓝色分量也类似处理。在这里用了两种方法可以实现此操作,一个就是直接用像素点进行操作,另一个就是Scanline方法。虽然这两种方法的实现原理是一样的,但是在速度上改进的Scanline方法明显要比直接用像素点进行操作的方法快。下面是这两个方法的具体实现。

3.3.2 程序实现

1)利用Pixels[]方法的实现技术

    这是直接通过像素点的操作,对像素点逐个进行处理,分别得到红色、绿色、蓝色分量来反走样图形。这个方法虽然实现十分简单,但是处理的速度十分的慢,需要相当长的一段时间。算法的实现如下:

  1)从一种颜色中求得RGB分量的过程

procedure TAntiAliasForm.SeparateColor(color: TColor; var r, g, b: Integer);

begin

              r := Byte(color);

              g := Byte(color shr 8);

              b := Byte(color shr 16);

end;

 

  2Pixels[]方法

   procedure TAntiAliasForm.AntiAliasPicture;

var

             x, y: integer;

             totr, totg, totb, r, g, b: integer;

             i, j: integer;

begin

             for y := 0 to orig_bmp.Height - 1 do

    begin

             for x := 0 to orig_bmp.Width - 1 do

        begin

           //初始化为0

            totr := 0;

            totg := 0;

               totb := 0;

               for i := 0 to 2 do

                  begin

                //处理3*3矩阵中的像素点

                for j := 0 to 2 do

                begin

                    SeparateColor(big_bmp.Canvas.Pixels[(x*3)+j,(y*3)+I,r,g,b]                      

                    totr := totr + r;//9个像素点的R分量总和

                    totg := totg + g; //9个像素点的G分量总和

                    totb := totb + b; //9个像素点的B分量总和

                end;

            end;

            out_bmp.Canvas.Pixels[x, y] := RGB(totr div 9,totg div 9,totb div 9);//取平均值

        end;

    end;

end;

 

 

本站发布的计算机毕业设计均是完整无错的全套作品,包含开题报告+程序+论文+源代码+翻译+答辩稿PPT

本文选自计算机毕业设计http://myeducs.cn
论文文章部分只是部分简介,如需了解更多详情请咨询本站客服!QQ交谈QQ3710167

原创论文

设为首页 | 加入收藏 | 论文首页 |原创论文 |
版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2020 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号 常年法律顾问:王律师