第15章.图形图像编程

第15章.图形图像编程
第15章.图形图像编程

第15章图形图像编程

在Web应用中,良好的图形图像的运用能够提升网站的友好度和易用性。.NET Framework提供了图形图像编程的方法,开发人员可以运用图形图像编程技术进行良好的Web应用中图形图像布局和编程,也可以通过GDI+实现类似Photoshop的功能。

15.1 图形图像基础

使用图形图像可以进行良好的页面布局,在现有的很多Web应用中,其应用程序的页面布局经常需要使用图像,这样能够让页面整体效果更加友好。用户会对界面友好的应用程序印象深刻从而会进行回访。https://www.360docs.net/doc/702049167.html,不仅能够进行图形图像显示,还能够使用GDI+进行图形图像的绘制。

15.1.1 图像布局

在页面布局中,很多设计人员喜欢使用CSS设计,这样能够简化页面代码,将页面布局代码和页面代码相分离,从而提高了维护性。虽然随着技术的发展,越来越多的动态生成页面布局,以及动态生成图像的方法也越来越多的被开发人员和设计人员所认知,但是开发人员和设计人员还是比较喜欢使用CSS和IMG标签进行页面布局,这是因为CSS和IMG标签都比较简单,可以说是“轻量级”的,即不需要页面进行逻辑处理也不需要动态生成。

1.IMG标签

IMG标签是图像标签,IMG标签属于HTML控件,在Web应用中可以看到在页面中包含大量的IMG 标签用于图形图像显示,示例代码如下所示。

上述代码显式了一个名为autom的JPG图像到页面中,如图15-1所示。

392

图15-1 插入图片

使用IMG 标签能够轻松的为网页添加图片,IMG 标签包括以下常用属性: ? Src :图片的地址,可以是图片的相对地址也可以是绝对地址。 ? Width :设定图片的宽度。 ? Height :设定图片的高度。

? Alt :当图片显示不了时提示的字符。 ? Border :图片的边框的宽度。 ? Align :图片的周片文字的对齐方式。 ? Title :当鼠标放在图片上出现的提示字符。

开发人员能够通过编写Width 和Height 属性进行图像的大小控制,也可以编写Alt 属性当图片显示不了时进行提示,如图15-2和图15-3所示。

图15-2 Width 属性 图15-3 Alt 属性

2.CSS

通过CSS 能够使用图像进行页面布局和样式控制。当需要使背景呈现渐变效果时,无需使用JavaScript 进行控制,可以直接使用CSS 和图像进行搭配使用即可。CSS 背景属性包括:

? 背景颜色属性(background-color ):该属性为HTML 元素设定背景颜色。

? 背景图片属性(background-image ):该属性为HTML 元素设定背景图片。

? 背景重复属性(background-repeat ):该属性和background-image 属性连在一起使用,决定背景

图片是否重复。如果只设置background-image 属性,没设置background-repeat 属性,在缺省状态下,图片既x 轴重复,又y 轴重复。

? 背景附着属性(background-attachment ):该属性和background-image 属性连在一起使用,决定

图片是跟随内容滚动,还是固定不动。

393

? 背景位置属性(background-position ):该属性和background-image 属性连在一起使用,决定了

背景图片的最初位置。 ? 背景属性(background ):该属性是设置背景相关属性的一种快捷的综合写法。 为了方便进行页面背景布局,可以使用CSS 背景属性,示例代码如下所示。

编写内容

上述代码将BODY 标签样式编写为背景颜色为#6094d7、背景图片编写为bg.jpg 并且背景图片按照x 轴重复。在body 标签下方包含一个DIV 标签,该标签作为主样式进行内容编写,编写内容后如图15-4所示。

图15-4 使用图形进行布局

3.JavaScript 进行图像编程

HTML 图像控件支持JavaScript 进行图像操作,可以为图像控件进行事件处理,JavaScript 代码如下所示。

上述代码获取图片ID 为pic1的图片属性,当触发该事件后,ID 为pic1的图片的宽度和高度将变为100。为了让图片被单击时触发该事件,则应该在IMG 标签中声明该事件,图片相应的代码如下所示。

上述代码定义了事件onclick 并定义了图片id 为pic1,运行后如图15-5和图15-6所示。

394

图15-5 原始图片 图15-6 触发JavaScript 事件后

使用IMG 标签进行图形图像编程是非常简单的方法。IMG 标签和CSS 配合能够进行页面布局,IMG 标签和JavaScript 进行配合能够进行图形图像的处理,所以IMG 标签是非常容易被学习和使用的。在Web 应用开发中,大量的IMG 被使用也说明IMG 标签是一种高效率、门槛低的图形图像编程方法。

15.1.2 GDI+简介

虽然通过IMG 标签和CSS 、JavaScript 相配合能够进行图形图像开发,但是其功能有限,并不能够进行高级的图形图像开发。高级的图形图像开发有点类似与Photoshop 中图形处理,在https://www.360docs.net/doc/702049167.html, 中,可以使用强大的GDI+进行图形图像开发,实现类似Photoshop 中图形处理的功能。

GDI+是Windows XP 中的一个子系统,它主要负责在显示屏幕和打印设备输出有关信息,它是一组通过C++类实现的应用程序编程接口。GDI+的前身是GDI ,在C++应用程序开发中,C++开发人员经常需要使用GDI 进行窗口的绘制与重绘,在Vista 操作系统之后的操作系统中,微软对图形图像编程进行了更新,在Vista 等系统中,大量的使用了半透明、渐变、边缘模糊化等效果,这就要求在编程中强化图形图像渲染,如图15-7所示。

图15-7 Vista特效

为了适应更高的用户要求和用户体验的要求,微软对GDI进行了升级,就成为GDI+。GDI+不仅能够在C++开发当中使用,也能够在.NET中使用GDI+强大的绘图效果。GDI+相比与GDI,进行了一些加强,这些加强功能如下所示。

?渐变的画刷(Gradient Brushes):GDI+允许开发人员使用渐变的画刷来绘制线条、图形以及外观。

?基数样条函数(Cardinal Splines):GDI+支持基数样条函数而GDI不支持,基数样条能够防止锯齿的出现,使得窗口以及图形的绘制能够平滑过渡。

?持久路径对象(Persistent Path Objects):在GDI中,绘制路径在窗口更改需要通过重绘来保持图形的持久化,而在GDI+中,可以通过创建对个对象来持久化。

?变形和矩阵对象(Transformations &Matrix Object):GDI+提供了强大的矩阵对象,开发人员可以通过矩阵对象进行图形的翻转、平移和缩放。

?可伸缩区域(Scalable Regions):GDI+允许在一定的范围内进行任何图形变换。

GDI+不仅包括这些新特性,还包括混合以及等多种图像类型支持等特性。https://www.360docs.net/doc/702049167.html,相对于ASP的强大之处就在于https://www.360docs.net/doc/702049167.html,可以使用GDI+进行图形图像编程,实现不同的Web应用功能。

15.1.3 绘制线条示例

通过GDI+能够在Web应用中绘制线条,如果需要使用GDI+,则首先需要引用命名空间System.Drawing,示例代码如下所示。

using System.Drawing; //使用绘图命名空间使用了命名空间后,就能够使用System.Drawing中的方法进行线条绘制,示例代码如下所示。

protected void Page_Load(object sender, EventArgs e)

{

Bitmap MyImage = new Bitmap(400, 400); //创建Bitmap对象

Graphics gr = Graphics.FromImage(MyImage); //创建绘图对象

Pen pen = new Pen(Color.Green, 10); //创建画笔对象

gr.Clear(Color.WhiteSmoke); //格式化画布

gr.DrawLine(pen, 50, 200, 400,20); //绘制直线

MyImage.Save(Response.OutputStream,System.Drawing.Imaging.ImageFormat.Jpeg); //输出

MyImage.Dispose(); //释放对象

gr.Dispose();

}

上述代码绘制了使用GDI+的Graphice类的对象进行线条的绘制,当页面被载入时则会开始绘制线条。当线条开始绘制时,首先需要创建一个Bitmap对象,Bitmap对象处理由像素定义的图像对象,示例代码如下所示。

Bitmap MyImage = new Bitmap(400, 400); //创建Bitmap对象上述代码创建了一个Bitmap对象并定义该对象区域为400*400,Bitmap就像画布。Graphice对象能够在该区域内绘制图形图像,示例代码如下所示。

Graphics gr = Graphics.FromImage(MyImage); //创建绘图对象定义了Graphice对象后就需要创建Pen对象进行绘制,Pen对象就像画笔,能够在画布上绘制图形,示例代码如下所示。

Pen pen = new Pen(Color.Green, 10); //创建画笔对象上述代码定义了画笔的颜色和宽度,定义画笔后就需要清除整个绘图面并进行背景颜色填充,示例

395

代码如下所示。

gr.Clear(Color.WhiteSmoke); //格式化画布填充背景后,就能够使用Graphice的DrawLine方法进行线条绘制,示例代码如下所示。

gr.DrawLine(pen, 50, 200, 400,20);

//绘制直线

上述代码则会在“画布”上绘制线条,运行后如图15-8所示。

图15-8 绘制线条

通过使用GDI+的Graphice类能够在页面中绘制图形,Graphice类还能够处理图片,实现锐化、底片等效果,Graphice类将在后面的章节详细讲到。

15.1.4 .NET Framework绘图类

GDI+包括很多的类,结构和枚举用于为开发人员提供快速进行图形图像开发提供保障和指导。

1.命名空间

GDI+包括很多的类、结构和枚举用于为开发人员提供图形编程,这些类、结构和枚举都定义在命名空间中,这些命名控件如下所示。

?System.Drawing:提供对GDI+基本图形图像功能的访问,Graphice包含在此命名空间中。

?System.Drawing.Drawing2D:提供高级的二维和矢量图形功能。

?System.Drawing.Imaging:提供高级的图像处理功能。

?System.Drawing.Text:提供高级的文字处理及排版功能。

?System.Drawing.Printing:提供图形打印所需要的类。

?System.Drawing.Design:提供开发UI设计时所需要的类。

这些命名空间为开发人员提供了图形图像编程的基本保障,其中最常用的是System.Drawing,该命名空间提供了Graphice类进行图形图像处理。System.Drawing.Drawing2D提供了高级的二维图形和矢量图形的处理功能,使用System.Drawing.Drawing2D能够进行二维图形和二维游戏的开发和编写。

System.Drawing.Imaging命名空间主要提供了图像处理的功能,例如将图像进行锐化处理,或者将图像变成黑白色或底片都可以通过使用System.Drawing.Imaging命名空间的方法。System.Drawing.Text 命名空间提供了文字处理能力,通过System.Drawing.Text类能够实现Word中艺术字的效果。

2.类和方法

396

在.NET Framework中,包括诸多的命名空间以保证开发人员能够快速的进行图形图像开发,在这些命名空间中,最常用的是System.Drawing命名空间,该命名空间提供的类如下所示。

?Bitmap:在Bitmap上使用图形工具,并在其中存储图形图像的绘图面板。

?Graphics:提供直线、曲线、多边形等绘画方法,也提供对一些位图的处理,例如平移、缩放等。

?Pen:提供直线、曲线等功能需要的画笔属性。

?Brush:提供文本填充和图形绘画,可以填充图形如圆形、椭圆形和多边形。

?Color:提供颜色的枚举,用于定义Pen和Brush的颜色。

?Font:提供文本的字体属性,定义文本的字体类型、样式和大小等。

?Point:用于定义有序的坐标对,这些坐标能够定义二维平面上的点。

?Size:定义区域的大小。

?Image:用于支持位图、指针和图标等文件类型。

?Rectangle:用于定义矩形区域。

?StringFormat:用于定义文本在位图上的对齐方式等属性。

简而言之,Bitmap就相当于绘画时需要的纸,图形能够绘画到纸上面。而Graphice相当于绘画的人,因为人能够提供只写、曲线、多边形等绘画方法,而Pen和Brush相当于绘画工具,如铅笔、笔刷等,Color就相当于是绘画所需要的颜料。

在绘画过程中,首先需要使用一张纸,固定到绘画板上,然后有一个人能够进行绘画,这个人能够进行素描、水彩等绘画。但是在绘画前,需要给这个人基本的工具,包括铅笔、笔刷和颜料盘等。在这些基本物质准备完毕后,就能够开始绘制了。GDI+的绘制过程与之非常的相似,首先需要定义一个画布,并通过构造函数定义画布的大小,示例代码如下所示。

Bitmap MyImage = new Bitmap(500, 500); //创建Bitmap对象上诉代码定义了一个大小为500*500的画布,定义了画布之后,就需要有一个人进行绘画操作,示例代码如下所示。

Graphics gr = Graphics.FromImage(MyImage); //创建Graphics对象上述代码定义了一个Graphics对象并指定该对象在MyImage画布上进行绘画,定义了Graphics对象后,需要给该对象指定工具,示例代码如下所示。

Pen pen = new Pen(Color.Green, 10); //创建画笔上述代码为对象指定了一个绿色的宽度为10的画笔,指定画笔后,这个“人”就能够进行绘画了。示例代码如下所示。

gr.DrawLine(pen, 50, 200, 400,20); //绘制直线

MyImage.Save(Response.OutputStream,System.Drawing.Imaging.ImageFormat.Jpeg); //输出通过DrawLine方法进行直线的绘画,绘画完毕需要执行Save方法把图片保存到文件中,或者使用Response.OutputStream将图片输出到HTTP流中在客户端浏览器中呈现。

15.2 图形编程

通过上面的章节了解了什么是GDI+,以及如何使用GDI+进行图形图像编程。在介绍了.NET Framework绘图类所需要的命名空间和方法后,就需要了解如何使用相应的命名空间和方法进行图形图像的绘制和处理。

397

15.2.1 Graphics类

Graphics类在GDI+的开发过程中非常重要,Graphics类封装了GDI+界面画图方法,以及图形显示设备,极大的简化了开发人员的编程过程。

1.Graphics类的属性

Graphics类的属性如下所示。

?DpiX:获取对象的水平分辨率。

?DpiY:获取对象的垂直分辨率。

?IsClipEmpty:为对象指定裁剪区域。

?IsVisibleClipEmpty;判断裁剪区域是否为空。

?TextGammaValue:返回一个提供文本灰度值的信息的整数值。

?TextRenderingHint:获取或设置与该图形相关联的文本着色模式。

通过Graphics类的属性能够获取Graphics对象的水平分辨率和垂直分辨率,并能够为Graphics对象进行裁剪区域的选择和判断。

2.Graphics类的方法

Graphics类提供的属性通常用于Graphics对象的信息获取,如果需要使用Graphics对象进行图形图像的绘制,则需要使用Graphics类提供的方法,Graphics类的部分方法如下所示。

?Dispose:删除图形并释放已分配的内存。

?DrawArc:绘制弧线。

?DrawBezier:绘制后三次贝塞尔曲线。

?DrawClosedCurve:绘制封闭曲线。

?DrawCurve:绘制曲线。

?DrawEllipse:绘制椭圆。

?DrawIcon:绘制图标图像。

?DrawIconUnstretched:绘制图标图像,并可将图像缩放到指定大小。

?DrawImage:绘制图像。

?DrawImageUnscaled:绘制图像,并可将图像缩放到指定大小。

?DrawImageUnscaledAndClipped:在不进行缩放的情况下进行图像绘制。

?DrawLine:绘制线条。

?DrawLines:绘制一系列线条组。

?DrawPath:绘制GraphicsPath。

?DrawPie:绘制扇形。

?DrawPolygon:绘制多边形。

?DrawRectangle:绘制矩形。

?DrawString:绘制字符串。

?Equals:判断两个Object类型是否相同。

?FillClosedCurve:填充封闭曲线的内部区域。

?FillEllipse:填充椭圆内部。

?FillPath:填充GraphicsPath内部。

?FillPie:填充扇形内部。

398

399

? GetHdc :获取图形上下文设备句柄。 ? Restore :恢复图形状态。 ? Save :保存图形。

? SetClip :为对象设置剪辑区域。

Graphics 类还包括其他方法提供对图形图像的绘制和处理进行编程,开发人员能够通过.NET Framework 提供的Graphics 类进行图形任何图形图像的编程。开发人员不仅能够可以绘制现有图形,还可以对图形进行渲染处理,这些渲染处理的效果能够应用到图形、文字和图表上。

15.2.2 绘制基本图形

通过使用Graphics 类,开发人员能够绘制基本图形,这些基本图形包括线条、矩形、椭圆和多边形。 1.绘制线条

在上面的章节中讲解了如何进行线条的绘制,这里再进行简单的介绍,能够加深对Graphics 类的理解,示例代码如下所示。

Bitmap images = new Bitmap(200, 200);

//创建画纸

Graphics gr = Graphics.FromImage(images); //创建Graphics 对象

Pen pen = new Pen(Color.Red, 5); //创建画笔

gr.Clear(Color.White); //设置画笔的颜色 gr.DrawLine(pen, 0, 0, 200, 200);

//开始绘画

images.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg); gr.Dispose(); //释放绘图对象 images.Dispose(); //释放图形对象

上述代码使用了DrawLine 方法进行直线的绘制,其中DrawLine 包括五个需要传递的参数,这五个此参数分别为起点的坐标和终点的坐标以及画笔。在上述代码中,图像大小为200*200,并在画布中从(0,0)坐标开始绘画到终点坐标为(200,200)的直线,绘制后的效果如图15-9所示。

图15-9 绘制线条形

2.绘制矩形

绘制矩形的方法同绘制线条基本相同,但是绘制矩形不仅要指定矩形的坐标,还需要指定矩形的高

度和宽度,示例代码如下所示。

Bitmap images = new Bitmap(400, 400); //创建画纸

Graphics gr = Graphics.FromImage(images); //创建Graphics对象

Pen pen = new Pen(Color.Red, 5); //创建画笔

gr.Clear(Color.White);

//设置画笔颜色

gr.DrawLine(pen, 0, 0, 200, 200); //绘制线条

gr.DrawRectangle(pen, 200, 200, 50, 50); //绘制矩形

images.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);

gr.Dispose();

images.Dispose();

从上面的代码不难看出,绘制矩形的方法同绘制线条的方法基本相同,绘制矩形使用了DrawRectangle方法进行绘制,DrawRectangle方法同样包括五个参数,这五个参数同绘制线条有一点不同。绘制线条需要指定绘制过程中开始坐标和终点坐标,而绘制矩形时需要指定开始坐标,矩形的高度和宽度以及所需的画笔,示例代码如下所示。

gr.DrawRectangle(pen, 200, 200, 50, 50); //绘制矩形上述代码绘制了一个矩形,其开始坐标为(200,200),并且高度和宽度都为50的矩形,运行后如图15-10所示。

图15-10 绘制矩形

3.绘制圆形和椭圆

绘制椭圆的方法只需要使用DrawEllipse方法即可,示例代码如下所示。

gr.DrawEllipse(pen, 0, 0, 300, 200); //绘制椭圆上述代码绘制了一个椭圆形,该椭圆形绘制的起点为(0,0),宽度为300,高度为200。DrawEllipse 方法同DrawRectangle方法基本相同,因为这两个方法都包括五个参数,这5个参数都需要指定绘制起点、宽度和高度。当需要绘制圆形时,只需要将宽度和高度设置相等即可,示例代码如下所示。

gr.DrawEllipse(pen, 0, 0, 200, 200); //绘制圆当设置宽度和高度相等时,该椭圆就会以圆形呈现,上述代码就实现了圆形的绘制。

4.绘制多边形

绘制多边形的方法只需要使用DrawPolygon方法即可,与绘制规则图形不同的是,绘制多边形需要指定多边形的各个节点,DrawPolygon方法通过获取这些节点即可组成一个多边形,示例代码如下所示。

400

Point pt1 = new Point(50, 50); //设置节点

Point pt2 = new Point(150, 150); //设置节点

Point pt3 = new Point(200, 200); //设置节点

Point pt4 = new Point(350, 170); //设置节点

Point pt5 = new Point(90, 30); //设置节点

Point pt6 = new Point(180, 90); //设置节点

Point[] pts = { pt1, pt2, pt3, pt4, pt5, pt6 }; //设置节点组

gr.DrawPolygon(pen, pts); //绘制多边形Point对象表示一个二维坐标中的一个点,通过Point的默认构造函数能够在二维坐标中指定一个点,示例代码如下所示。

Point pt1 = new Point(50, 50); //设置节点定义了平面上的一个点之后,需要为多边形定义多个点,多个点能够组成一个多边形,这些点组成一个二维坐标的集合,示例代码如下所示。

Point[] pts = { pt1, pt2, pt3, pt4, pt5, pt6 }; //设置节点组上述代码定义了一个Point类型的数组声明一个二维坐标的集合,通过DrawPolygon方法即可定义绘制多边形,示例代码如下所示。

gr.DrawPolygon(pen, pts); //绘制多边形5.绘制文字

通过使用DrawString方法能够绘制文字并呈现在图像中,示例代码如下所示。

Font font = new Font("宋体", 20); //创建文字对象

Brush brush=new SolidBrush(Color.Red); //创建笔刷对象

gr.DrawString("我的字符串", font, brush, 200,200); //绘制文字使用DrawString方法,需要对DrawString方法进行参数传递,DrawString方法需要五个参数,其中包括需要输出的字符串、文本格式对象、笔刷对象以及文字开始绘制的坐标。上述代码中,输出字串为“我的字符串”。文本格式通过Font默认构造函数构造,并在坐标为(200,200)位置开始绘制。

15.2.3 图形绘制实例

上面一节讲解了如何分别绘制图形,使用相应的方法能够绘制相应的图形。.NET Framework为图形图像开发进行了封装,使用.NET Framework进行图形图像开发非常简单,下面绘制一些基本图形,并填充基本图形,示例代码如下所示。

protected void Page_Load(object sender, EventArgs e)

{

Bitmap images = new Bitmap(400, 400); //创建画纸

Graphics gr = Graphics.FromImage(images); //创建绘图类

Pen pen = new Pen(Color.Red, 5); //创建画笔

gr.Clear(Color.White); //绘制直线

gr.DrawLine(pen, 0, 0, 200, 200); //绘制矩形

gr.DrawRectangle(pen, 200, 200, 50, 50); //绘制椭圆

gr.DrawEllipse(pen, 0, 0, 300, 200); //绘制多边形

Point pt1 = new Point(50, 50); //设置节点

Point pt2 = new Point(150, 150); //设置节点

Point pt3 = new Point(200, 200); //设置节点

Point pt4 = new Point(350, 170); //设置节点

Point pt5 = new Point(90, 30); //设置节点

Point pt6 = new Point(180, 90); //设置节点

401

gr.DrawPolygon(pen, pts);

//绘制文字

Font font = new Font("宋体", 20); //设置字体大小

Brush brush=new SolidBrush(Color.Red); //创建红色笔刷

gr.DrawString("我的字符串", font, brush, 200,200); //填充矩形

SolidBrush brush2 = new SolidBrush(Color.YellowGreen);

gr.FillRectangle(brush2,new Rectangle(100,100,100,100)); //填充矩形

images.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);

gr.Dispose();

images.Dispose();

}

上述代码分别绘制了直线、矩形、椭圆、文字和多边形,并填充了矩形,运行后如图15-11所示。

图15-11 图形绘制实例

正如图15-20所示,开发人员能够使用.NET Framework提供的绘图类进行基本图形的绘制,不仅如此,.NET Framework绘图类还提供了文字和图片的特效绘制方法。

15.3 绘制文字特效

在Word中,文本编辑人员经常使用艺术字进行Word编辑和排版,艺术字在很大程度上丰富了排版功能和艺术效果,通过使用.NET Framework绘图类能够实现文字的艺术化效果从而丰富页面中的文本显示效果。

15.3.1 投影特效

使用System.Drawing.Drawing2D和System.Drawing.Text能够进行文字投影特效。在制作文字投影特效前,首先需要使用命名空间System.Drawing.Drawing2D和System.Drawing.Text。在实现投影效果前,首先需要了解如何制作投影。

投影特效的难度在于如何描述本体的影子。其实在画面上,影子是不可能像平常的描述一样呈现在图片上的,这也就是说,影子其实也是本体对象的另一种表现形式。首先,影子可以看作是本体的压缩

402

403

和平移,在对本体进行压缩和平移后,从一定的角度上看就好像是本地的影子。其次,影子是没有颜色的,通常用灰色输出即可实现影子的效果。在制作投影特效时,需要使用到Matrix 类,该类需要使用System.Drawing.Drawing2D 和System.Drawing.Text 命名空间,示例代码如下所示。

using System.Drawing; //使用绘图类 using System.Drawing.Drawing2D;

//使用绘图类

using System.Drawing.Text;

引用了命名空间后,就可以使用相应的方法进行特效的制作,示例代码如下所示。

Bitmap images = new Bitmap(600, 150);

//创建Bitmap 对象 Graphics gr = Graphics.FromImage(images); //创建Graphics 对象

gr.Clear(Color.WhiteSmoke);

//填充背景颜色 gr.TextRenderingHint = TextRenderingHint.ClearTypeGridFit;

//设置文本输出质量

gr.SmoothingMode = SmoothingMode.AntiAlias; Font newFont = new Font("宋体", 32); Matrix matrix = new Matrix(); //执行投射 matrix.Shear(-1.5f, 0.0f); //执行缩放 matrix.Scale(1, 0.5f); //执行平移 matrix.Translate(130, 88); //执行坐标转换

gr.Transform = matrix;

SolidBrush grayBrush = new SolidBrush(Color.Gray);

SolidBrush colorBrush = new SolidBrush(Color.Red); string text = "https://www.360docs.net/doc/702049167.html, 3.5开发大全"; //设置文字 gr.DrawString(text, newFont, grayBrush, new PointF(0, 30)); //绘制阴影 gr.ResetTransform(); //图形变形 gr.DrawString(text, newFont, colorBrush, new PointF(0, 40)); //绘制前景 images.Save(Response.OutputStream, System.Drawing.Imaging.ImageForm at.Jpeg);

上述代码使用了Matrix 类进行了倒影效果的实现,Matrix 类封装表示几何变换的3 x 3仿射矩阵。Matrix 类中常用的方法有:

? Shear :通过预先计算比例向量,将指定的比例向量应用到此矩阵。 ? Scale :通过预先计算切变向量将指定的切变向量应用到此矩阵。

? Translate :通过预先计算转换向量,将指定的转换向量应用到此矩阵。

使用Matrix 类能够进行对象的投射、缩放以及平移,并通过执行坐标转换呈现在图片中。作为投影特效,Matrix 类通过将现有的对象进行转换、压缩、平移,并通过Graphics 对象的DrawString 方法进行输出,使之看上去向文字的投影效果一样,如图15-12所示。

图15-12 实现文字的投影效果

404

15.3.2 倒影特效

在Photoshop 中,可以很容易的实现倒影效果,通过GDI+同样也能够快捷的实现倒影效果。在实现倒影效果时,首先需要理清倒影是如何实现的,倒影同影子一样。在编程中,没有倒影的概念,其实倒影就是本体的另一种表现形式,与投影不同的是,投影是将本体进行压缩或拉伸,从一个角度来看成为影子的效果,而倒影其实就是本地的垂直旋转。

在进行垂直旋转后,倒影通常情况下颜色要比本体要淡,这样才能真实的模拟倒影的效果,实现倒影效果示例代码如下所示。

Brush shadowBrush = Brushes.LightBlue;

//创建倒影笔刷 Brush foreBrush = Brushes.Blue; //创建本体笔刷 Font font = new Font("微软雅黑", Convert.ToInt16(40), FontStyle.Italic); //配置字体 Bitmap images = new Bitmap(600, 150);

Graphics gr = Graphics.FromImage(images); //创建Graphice gr.Clear(Color.WhiteSmoke);

string text = "https://www.360docs.net/doc/702049167.html, 3.5开发大全"; //设置文字

SizeF size = gr.MeasureString(text, font);

//设置矩形大小 int posX = (600 - Convert.ToInt16(size.Width)) / 2; //设置平移坐标 int posY = (150 - Convert.ToInt16(size.Height)) / 2; //设置平移坐标 gr.TranslateTransform(posX, posY); //执行转换 GraphicsState state = gr.Save(); //图形保存 gr.ScaleTransform(1, -1.0F); //图形变换 gr.DrawString(text, font, shadowBrush, 0, -120); //输出倒影 gr.Restore(state); //图形重置 gr.DrawString(text, font, foreBrush, 0, 0);

//输出本体

images.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);

倒影效果相对与投影效果来说比较简单,倒影效果只是将Graphics 对象的矩形大小进行转换,然后通过平移操作进行翻转操作,翻转完成后直接输出倒影,而又因为倒影输出的文字比本体输出的文字要淡,看上去很像倒影的效果,如图15-13所示。

图15-13 倒影效果

15.3.3 旋转特效

通过GDI+能够通过非常简单的代码实现非常酷的效果,例如旋转特效就是一个非常酷的效果,在进行旋转特效编写前,首先需要了解如何实现旋转特效的。如果要实现旋转特效,首先需要获取一段文

405

字,该文字进行通过平移坐标原点进行变换,当需要实现旋转时,则通过循环不停的实现旋转平移,示例代码如下所示。

Bitmap images = new Bitmap(400, 400);

//创建Bitmap 对象 Graphics gr = Graphics.FromImage(images); //创建绘图对象 gr.Clear(Color.WhiteSmoke); //格式化画布 gr.SmoothingMode = SmoothingMode.AntiAlias; //设置边缘 for (int i = 0; i <= 360; i += 20) //循环旋转 {

gr.TranslateTransform(200, 200); //变形

gr.RotateTransform(i); //按角度变形 Brush brush = Brushes.Red;

//创建画笔 Font font = new Font("微软雅黑", 12); //创建文字 gr.DrawString("https://www.360docs.net/doc/702049167.html, 3.5 开发大全 ", font, brush, 0, 0); //绘制文字 gr.ResetTransform();

//重置变形

}

images.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);

上述代码运行后如图15-14和图15-15所示。

图15-14 旋转特效 图15-15 旋转半周

旋转特效就是按照循环不停的将本体进行循环并执行输出,在执行循环的过程中,因为圆的角度是360度的,所以循环时也需要循环360度,如果循环不被等于360,则会出现半周的情况,如图15-15所示。

15.4 绘制图片

通过IMG 标签能够插入图像,IMG 标签小巧而灵活,但是在如果需要使用GDI+实现图形图像的渲

染,IMG标签所呈现的图形显然是不行的,https://www.360docs.net/doc/702049167.html,提供了Image控件用来创建图片,并能够通过Image 控件进行图片编程。

15.4.1 载入图像文件

使用Image控件能够载入图像文件,拖动一个Image控件到页面,页面会自动生成HTML代码,示例代码如下所示。

在控件的章节中,讲到Image控件包括以下常用属性:

?AlternateText:在图像无法显示时显示的备用文本。

?ImageAlign:图像的对齐方式。

?ImageUrl:要显示图像的URL。

通过配置以上三种属性能够呈现不同的图片效果,配置完成后的图像控件示例代码如下所示。

ImageUrl="~/autom.jpg" />

上述代码配置了Image控件的基本属性,包括Image控件所需要呈现的图像,以及Image控件呈现的图像不存在时需要提示的信息,运行后如图15-16和图15-17所示。

图15-16 Image控件图15-17 图片不存在

15.4.2 GDI+输出图像

使用Image控件能够快速的载入图形,但是Image控件并不支持Click事件,所以对Image控件是没有办法进行事件操作的,如果需要对图像进行事件操作并支持裁剪等高级方法时,可以采用GDI+进行图形输出,示例代码如下所示。

protected void Page_Load(object sender, EventArgs e)

406

{

Bitmap images = new Bitmap(Server.MapPath("autom.jpg")); //读取现有图片images.Save(Response.OutputStream, images.RawFormat); //格式化输出

images.Dispose();

//释放对象

}

上述代码使用了Bitmap类进行图形输出,Bitmap类的默认构造方法能够载入现有的图片并执行输出。

注意:Bitmap类的RawFormat属性能够直接返回现有文件的文件类型,在Bitmap的Save方法中可直接使用。

15.5 图像特效处理

相比与IMG标签而言,https://www.360docs.net/doc/702049167.html,能够通过GDI+动态的创建图像并且进行图片特效处理。相对于文字处理而言,图片特效处理很像Photoshop中对图片的处理,开发人员能够实现不同的图片特效,如呈现底片效果、黑白效果等。

15.5.1 底片效果

通过Photoshop等软件能够快速的将图片制作成底片效果,但是在传统的图片处理领域中,只能通过软件进行图片效果的更改。在https://www.360docs.net/doc/702049167.html,中,可以通过网页进行图片处理,包括底片、锐化等效果。

在进行底片效果制作前,首先需要了解底片效果是如何实现的,在图片显示中,其实是很多很多的点(像素)组成一个图片的,如果像素的数量很多,则图片显示的就清晰,如果像素数量较少,则图片看上去就不那么清晰。一个图片的组成是通过像素组成的,这也就是说,一个图片包括很多的小点进行组合,最后组合成图片,如图15-18所示。

图15-18 图片中的像素

在进行底片效果的制作时,只需要分别找到图片中的这些点,并获取这些点的像素的值,再取反保存即可,示例代码如下所示。

protected void Page_Load(object sender, EventArgs e)

{

Bitmap images = new Bitmap(Server.MapPath("change.jpg")); //载入图片

for (int i = 0; i < images.Width; i++) //循环遍历宽

{

407

for (int j = 0; j < images.Height; j++)

//循环遍历高度{

Color pix = images.GetPixel(i, j); //获取图像像素值

int r = 255 - pix.R; //像素值取反

int g = 255 - pix.G; //转换颜色

int b = 255 - pix.B; //转换颜色

images.SetPixel(i, j, Color.FromArgb(r, g, b)); //保存像素值}

}

images.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);

images.Dispose();

}

上述代码通过循环遍历像素值并进行像素值取反则能够实现底片效果,运行效果前后如图15-19和图15-20所示。

图15-19 原图像图15-20 执行底片效果

在图像中,图像通常是使用RGB三原色进行图形渲染的,RGB分别为红色、绿色和蓝色,图形通过协调这三原色进行图形渲染。RGB在计算机中通常描述的范围是从0-255之间的某个数值的,所以当需要取反时,只需通过255减去现有的像素的色值即可。

15.5.2 浮雕效果

对于图片效果的更改和渲染都是通过修改像素的值来进行渲染的,当像素足够大时,人眼无法辨认其像素的多少,所以更改像素的大小对人眼来说是无法发觉的。

执行浮雕效果与底片效果实现手法非常类似,但是浮雕效果的实现与底片效果的实现中所需要使用的算法又不尽相同。实现浮雕效果通常是将图像上每个像素点与其对角线的像素点形成差值,使相似颜色值淡化,不同颜色值之间保持突出,从而形成纵深感,达到浮雕的效果。在程序开发中,可以讲像素点的像素值与周边的像素值相减后加上128,则可以呈现浮雕效果,示例代码如下所示。

protected void Page_Load(object sender, EventArgs e)

{

Bitmap images = new Bitmap(Server.MapPath("change.jpg")); //载入图片

for (int i = 0; i < images.Width-1; i++) //循环遍历宽

{

408

409

for (int j = 0; j < images.Height-1; j++) //循环遍历高度 {

Color pix1 = images.GetPixel(i, j);

//获取图像像素值 Color pix2 = images.GetPixel(i+1, j+1); //获取图像像素值 int r = Math.Abs(pix1.R - pix2.R + 128);

//实现浮雕效果

int g = Math.Abs(pix1.G - pix2.G + 128); int b = Math.Abs(pix1.B - pix2.B + 128); r = check(r);

//判断是否溢出

g = check(g); b = check(b);

images.SetPixel(i, j, Color.FromArgb(r, g, b));

//设置像素值

}

}

images.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg); images.Dispose(); }

在进行浮雕效果实现时,需要进行判断,判断转换后的值是否超过255或者小于0,如果超过255则按照255进行处理,如果小于0则按照0进行处理。check 函数代码如下所示。

protected int check(int x) {

if (x > 255) //如果像素值大于255 {

return 255; //返回255 }

else if (x < 0) //如果像素值小于0 {

return 0;

//返回0

} else {

return x; //直接返回

} }

程序运行后,图片渲染前后效果如图15-21和图15-22所示。

图15-21 原图像图15-22 执行浮雕效果

15.6 小结

本章介绍了https://www.360docs.net/doc/702049167.html,图形图像编程,通过https://www.360docs.net/doc/702049167.html,图形图像编程能够在Web上执行图形图像的修改以及渲染。在页面中绘制图形图像包含很多方法,最简单的方法就是使用Graphics类中的方法进行图形的绘制,Graphics类不仅提供了基本图形的绘制,还提供了图像、图标图像的绘制。GDI+看上去好像比较复杂,但是通过几个实例就能够了解其实GDI+并不困难,在https://www.360docs.net/doc/702049167.html,中,最常用的图形图像编程的方类属Graphics类了。本章还包括:

?图形图像基础:介绍了图形图像编程基础。

?GDI+简介:介绍了GDI+编程基础。

?.NET Framework绘图类:介绍了.NET Framework绘图类。

?图形绘制实例:进行图形图像编程,通过使用现有类进行基本图形的创建。

?绘制文字特效:使用GDI+进行文字绘制和特效渲染。

?图像特效处理:使用GDI+进行图像特效的处理。

本章还介绍了图像显示的基本原理,以及图像特效的实现思路。

410

计算机图形与可视化课程设计

课程设计课程名称:计算机图形学与可视化学生姓名: 学号: 专业班级: 指导老师: 院系名称:

课程设计任务书 设 计 题 目 利用迭代函数系统生成分形图案成绩课 程设计主要内容迭代函数系统(Iteration Function System,简称IFS)是以仿射变换为框架,根据几何对象的整体与局部具有自相似的结构,将总体形状以一定的概率按不同的仿射变换迭代下去,直至得到满意的分型图形。迭代函数系统绘制分形图形有两种方法:确定性迭代算法和随机性迭代算法。本文将以此原理出发,分析分形图形的生成方法,探索一些利用IFS产生丰富的分形图形的简便方法及具体应用。 具体内容请看下面的正文。 指导教师评语建议:从学生的工作态度、工作量、设计(论文)的创造性、学术性、实用性及书面表达能力等方面给出评价。 签名: 20 年月日

目录 一.系统功能介绍 (4) 二.设计思路 (6) 三.模块图 (6) 四.小组成员及任务分配 (7) 五.主要算法介绍 (7) 六.源代码 (8) 七.程序使用说明 (8) 八.调试结果 (8) 九.总结 (14) 十.参考文献 (15)

正文: 一.系统功能介绍 迭代函数系统(Iteration Function System,简称IFS)最早是由Hutchision 在1981年提出的。美国佐治亚理工学院的M F Bamsley等人在SIGGRAMPH’88国际会议上对IFS所作的专题报告,使IFS成为分形图像压缩的基础,从而使IFS成为分形图形学最有生命力的领域之一。 迭代函数系统(IFS)是以仿射变换为框架,根据几何对象的整体与局部具有自相似的结构,将总体形状以一定的概率按不同的仿射变换迭代下去,直至得到满意的分形图形。 目前使用的迭代函数系统绘制分形图的算法主要有两种:确定性迭代算法和随机性迭代算法。它们都是通过IFS码进行迭代而产生图形的方法。 确定性迭代算法是通过仿射变换得到的。其基本原理就是找一个初始集,对集上的每一个点,根据给定的仿射变换公式进行数据变换,便可得到新的点集。这样通过多次迭代,便可绘制所需的图形。并且每个图形的局部和整体相似。只要其仿射变换系数相同,即IFS码相同,当迭代次数足够大时,最终生成的图形是相同的。 随机性迭代算法用到了概率,从而可以对图形的细节和颜色进行控制。随机性迭代算法的基本原理就是利用一个给定的IFS码{:j=1,2,…,N}(每一个仿射变换对应于一个概率),从任选的一个初始点(,)出发,依据其概率分布{,,,…,},从{:j=1,2,…,N}中选择相应的进行仿射变换,可得到新的点(,)。然后再由概率选择相应的进行变换,进而得到新的点(,)。这样反复迭代,便可得到一系列的点{(,),(,),(,),…}。这些点集显示在屏幕上,便得到一个完整的分形图。 分形,又称碎形,通常被定义为“一个粗糙或零碎的几何形状,可以分成数个部分,且每一部分都(至少近似地)是整体缩小后的形状”,即具有自相似的性质。分形思想的根源可以追溯到公元17世纪,而对分形使用严格的数学处理则始于一个世纪后卡尔·魏尔施特拉斯、格奥尔格·康托尔和费利克斯·豪斯多夫对连续而不可微函数的研究。但是分形一词直到1975年才由本华·曼德博创造出,来自拉丁文,有“零碎”、“破裂”之意。一个数学意义上分形的生成是基于一个不断迭代的方程式,即一种基于递归的反馈系统。分形有几种类型,可以分别依据表现出的精确自相似性、半自相似性和统计自相似性来定义。虽然分形是一个数学构造,它们同样可以在自然界中被找到,这使得它们被划入艺术作

课程设计报告-车牌识别系统的设计

车牌识别系统的设计 一、摘要: 随这图形图像技术的发展,现在的车牌识别技术准确率越来越高,识别速度越来越快。无论何种形式的车牌识别系统,它们都是由触发、图像采集、图像识别模块、辅助光源和通信模块组成的。车牌识别系统涉及光学、电器、电子控制、数字图像处理、计算视觉、人工智能等多项技术。触发模块负责在车辆到达合适位置时,给出触发信号,控制抓拍。辅助光源提供辅助照明,保证系统在不同的光照条件下都能拍摄到高质量的图像。图像预处理程序对抓拍的图像进行处理,去除噪声,并进行参数调整。然后通过车牌定位、字符识别,最后将识别结果输出。 二、设计目的和意义: 设计目的: 1、让学生巩固理论课上所学的知识,理论联系实践。 2、锻炼学生的动手能力,激发学生的研究潜能,提高学生的协作精神。 设计意义: 车牌定位系统的目的在于正确获取整个图像中车牌的区域,并识别出车牌号。通过设计实现车牌识别系统,能够提高学生分析问题和解决问题的能力,还能培养一定的科研能力。 三、设计原理: 牌照自动识别是一项利用车辆的动态视频或静态图像进行牌照号码、牌照颜色自动识别的模式识别技术。其硬件基础一般包括触发设备、摄像设备、照明设备、图像采集设备、识别车牌号码的处理机等,其软件核心包括车牌定位算法、车牌字符分割算法和光学字符识别算法等。某些牌照识别系统还具有通过视频图像判断车辆驶入视野的功能称之为视频车辆检测。一个完整的牌照识别系统应包括车辆检测、图像采集、牌照识别等几部分。当车辆检测部分检测到车辆到达时触发图像采集单元,采集当前的视频图像。牌照识别单元对图像进行处理,定位出牌照位置,再将牌照中的字符分割出来进行识别,然后组成牌照号码输出。 四、详细设计步骤:

Qt 图形 课程设计

郑州科技学院QT课程设计 题目图形图像的绘制 学生姓名 专业班级 学号 所在系信息工程学院 指导教师 完成时间年月日

目录 1. 概述 (4) 1.1 背景说明 (4) 1.1.1简介 (4) 1.1.2 功能和优势 (4) 1.2 项目名称 (5) 1.3 项目功能 (5) 1.4 项目基本框架结构 (5) 2. 各模块功能的介绍 (6) 2.1 工具栏 (6) 2.1.1 file文件 (6) 2.1.2 help帮助 (7) 2.2 操纵台 (7) 2.2.1 style线型选择 (7) 2.2.2 width画笔宽度 (8) 2.2.3 color画笔颜色 (8) 2.2.4 clear清空画板 (9) 2.2.5 绘制图形 (9) 2.2.6 erasor 橡皮擦 (10) 2.2.7坐标定位 (11) 2.2.8画布 (11) 2.3 布局格式 (11) 3. 详细设计 (12) 3.1 子菜单功能的实现 (12) 3.1.1 New功能的实现 (12) 3.1.2 Open 功能的实现 (13) 3.1.3 Save 功能的实现 (13) 3.1.4 SaveAs 功能的实现 (14) 3.1.5 Exit 功能的实现 (15) 3.2悬浮窗内各个功能的实现 (15) 3.2.1 Style功能的实现 (15)

3.2.2 Width 功能的实现 (16) 3.2.3 Color 功能的实现 (17) 3.2.4 Clear 功能的实现 (18) 3.2.5 绘图功能的实现 (19) 3.2.6 erasor 功能的实现 (20) 3.3鼠标形状设置 (20) 3.4 坐标位置显示功能的实现 (21) 4. 项目中所用到的QT知识介绍 (21) 4.1 信号与槽 (21) 4.2 创建主窗口 (23) 4.3 自定义窗口部件 (23) 4.4 布局管理 (23) 4.5 QT中的事件机制 (24) 4.6 二维图形的绘制 (25) 4.7 项目中建立的类 (25) 4.8 类之间的相互关系 (25) 结束语 (26) 致谢 (26) 参考文献 (27)

C语言课程设计--计算器(图形界面)

扬州大 学 题目一个简易计算器的设计与实现 班级 学号 姓名 指导教师 成绩 老师评语: 扬州大学信息工程学院 2010 年6 月25

目录 一、程序设计目的: (1) 二、程序设计内容: (1) 三、课程设计所补充的内容:补充的函数或算法…………3,4 四、系统总体设计 (4) 五、系统详细设计………………………………………5,6,7,8 六、运行结果………………………………………………8,9,10 七、系统调试…………………………………………8,9,10,11 八、课程设计体会总结………………………………8,9,10,11

1 课程设计目的 (1).课程设计是一项综合性实践环节,是对平时实验的一个补充,课程设计内容包括课程的主要理论知识,但由于C语言对初学者较难掌握,因而对一个完整的C语言程序不适合平时实验。通过课程设计可以达到综合设计C语言程序的目的。 (2)通过本课程设计,可以培养独立思考,综合运用所学有关相应知识的能力,能更好地使用C语言的知识,更好地了解C语言的好处和其可用性!掌握基本的程序设计过程和技巧,掌握基本的分析问题和利用计算机求解问题的能力,具备初步的高级程序设计能力。为后续各门计算机课程的学习和毕业设计打下坚实基础! (3)通过本程序训练程序设计的基本技能,掌握字符串的表示方法和字符串函数的功能、自学掌握四则运算的算法及WIN-TC的图形操作的基本知识、键盘上特殊键的获取及图形方式下光标的显示。 2 课程设计内容 目的:本课程的课程设计要求学生模拟实现一个简单计算器,要求(1)能够实现四则运算,并能支持优先级运算。(2)三角与反三角运算:如sinx,cosx等。(3)指数对数运算:如log(x),lnx,e的x次方等。(4)其他运算:如X!,x 的累加等。(4)不允许调用库函数,使用自行开发的程序实现常用函数运算。(5)进一步考虑计算器外观设计,用可视化界面给出计算器外观、功能按键及输入界面。 使用说明:执行加法运算,'—'表示执行减法运算,表示执行乘法运算,'/'表示除法运算.‘Q’表示退出计算器‘C’表示清零,’=’表示得出结果'^'表示执行x的y次方,'e'表示执行e的x次方操作,'&'表示执行累加操作.,你可以可以用键盘上的上下左右键对光标进行移动,当光标移动到计算器按键上时,按ENTER即可执行该键的操作!最后按“=”则可得出结果。 3 课题设计的补充知识 本程序通过int specialkey(void)和#include来实现对屏幕的操作,通过调用int arrow()函数,int specialkey(void)和#include来实现对光标的操作。计算机图形采用Turbo C 2.0绘图程序制作。因此涉及C的图形程序设计知识。此外,由于不允许调用库函数,则要自行开发程序实现sinx,cosx,e的x次方函数运算,则可以根据幂级数的展开式来设计实现其运算的算法,而x的阶乘和x的累加则可用for语句来实现。 最后,不得不说说四则运算的算法,有两种方法可以实现:(1)利用堆栈实现四则运算(2)还可以用递归整数的四则运算。 sinx函数 #include

计算机图形学课设(含所有程序图文)

计算机图形学课程设计报告 系(院):计算机科学学院 专业班级:信计11102 姓名:吴家兴 学号:201106262 指导教师:严圣华 设计时间:2014.6.16 - 2014.6.26 设计地点:10教机房

(此处目录根据自己情况可以调整改动) 一、课程设计目的 ................................................. 错误!未定义书签。 二、课程设计具体要求..................................... 错误!未定义书签。 三、需求分析与总体设计 ..................................... 错误!未定义书签。 四、详细设计与实现[含关键代码和实现界面] ... 错误!未定义书签。 五、小结......................................................................................... 错误!未定义书签。 一、课程设计目的 计算机图形学课程设计是验证、巩固和补充课堂讲授的理论知识的必要环节,通过上机实验,培养学生的自学能力、动手能力、综合运用知识解决实际问题的能力。要求学生运用计算机图形学理论与技术设计、编写、调试程序并撰写课程设计报告。 二、课程设计具体要求 1.独立完成设计并撰写课程设计报告。 2.在规定时间将程序和设计报告用附件(信计111X班XXX 图形学课设报告.RAR)发送到274548837@https://www.360docs.net/doc/702049167.html,,并上交纸质打印稿(A4纸10页左右)。 3. 课程设计报告内容包括: (1)列出设计者姓名及本人详细信息、所用开发工具; (2)程序的基本功能介绍; (3)程序实现步骤和关键算法的理论介绍; (4)关键源代码实现说明。(不要打印全部源程序!) (5)程序运行界面截图(3幅左右) (6)课设总结和自我评价。 4.《计算机图形学》课程的知识结构体系: (1)课设为期两周:总学时为40学时,2学分 (2)学生必须完成二维线画图元和二维填充图元两个大功能。二维裁剪和二维图形变换至少实现两个内容。总共不少于10个算法。 (3)程序应做到:通用性、交互性、界面友好性!

基于某LinuxQT图形图像课程设计

科技学院 QT课程设计

题目制作画图工具学生 专业班级 学号 所在系 指导教师 完成时间年月日

目录 1概述 (1) 1.1项目名称 (1) 1.2 画图工具基本框架 (1) 1.3 画图工具功能介绍 (2) 1.3.1菜单 (2) 1.3.2线型选择 (3) 1.3.3画笔宽度 (3) 1.3.4画笔颜色 (3) 1.3.5清空画板 (3) 1.3.6绘制图形 (3) 1.3.7橡皮擦 (3) 1.3.8坐标定位 (3) 1.4 制作画图工具使用的编程语言 (4) 1.5 编译环境 (4) 1.6 使用QT编程语言制作画图工具的优势 (4) 1.7 项目制作过程中应用到的QT知识 (4) 1.7.1信号与槽 (4) 1.7.2对话框 (4) 1.7.3创建主窗口 (4)

1.7.5布局管理 (5) 1.7.6 QT中的事件机制 (5) 1.7.7二维图形的绘制 (5) 1.8 项目中建立的类 (5) 1.9 类之间的相互关系 (5) 2 总体设计 (6) 2.1 主窗口 (6) 2.1.1创建主窗口 (6) 2.1.2添加菜单 (6) 2.1.3添加子菜单 (6) 2.1.4创建状态栏 (7) 2.2 悬浮窗 (7) 2.2.1线型选项 (7) 2.2.2画笔宽度调节 (8) 2.1.3画笔颜色选择 (8) 2.2.4清空画板 (9) 2.2.5绘制图形 (9) 2.2.6橡皮擦 (9) 2.3 画板 (10)

2.3.2画布的颜色初始化 (10) 2.3.3画板大小 (10) 3 详细设计 (10) 3.1 子菜单功能的实现 (10) 3.1.1 New功能的实现 (10) 3.1.2 Open 功能的实现 (11) 3.1.3 Save 功能的实现 (11) 3.1.4 SaveAs 功能的实现 (12) 3.2 悬浮窗各个功能的实现 (13) 3.2.1 Style功能的实现 (13) 3.2.2 Width 功能的实现 (14) 3.2.3 Color 功能的实现 (14) 3.2.4 Clear 功能的实现 (16) 3.2.5 绘图功能的实现 (16) 3.2.6 eraser 功能的实现 (17) 3.3 鼠标形状设置 (17) 3.4 坐标位置显示功能的实现 (17) 结束语 (18) 致谢 (19) 参考文献 (20)

计算机图形学课程设计

《计算机图形学》实验报告 题目: 3D真实感场景 绘制 姓名: 郭继杰 学号: 2014214168 班级: 地信141 学院: 理学院 指导老师: 解山娟 日期: 2017年1月1日 一、实验目的 结合一学期所学计算机图形学知识,基于专业背景,使用OpenGL 绘制简单的3D真实感图形场景。 二、实验要求 应用光栅化算法、多边形裁剪计算以及消隐算法在场景绘制中, 其中真实感场景绘制包括颜色模型、纹理模型、雾化模型、运动模型 以及环境光、漫反射、镜面反射等光照模型设置。 三、实验小组及任务分工 小组成员任务分工 金城纹理贴图,颜色模型,雾化模型 郭继杰运动模型,光照模型

沈黎达材料收集,代码整合 四、实验内容 1、实验前期工作 前期工作经过小组成员充分讨论,资料收集,最终确定小组实验模板为以下两幅场景。目标就是实现一艘简单3D帆船模型以及一辆3D小车模型 2、程序编译环境:Visual Studio 2012 3、光照模型建立过程 光照模型建立流程图: 3、1设置光照模型相应指数

3、2打开光源 光照模型设计过程有两点注意的就是: 1、glShadeModel函数用于控制opengl中绘制指定两点间其她点颜色的过渡模式,参数一般为GL_SMOOTH、GL_FLAT,如果两点的颜色相同,使用两个参数效果相同,如果两点颜色不同,GL_SMOOTH会出现过渡效果,GL_FLAT 则只就是以指定的某一点的单一色绘制其她所有点。 glShadeModel(GL_FLAT) 着色模式glShadeModel(GL_SMOOTH)着色模式(可以瞧出GL_SMOOTH模式下颜色更加光滑) 2、需要使用光照模型时必须启用,glEnable(GL_LIGHTING)(启用灯源)、glEnable(GL_LIGHT0)(启用光源),否则所有灯光效果都会无效。效果对比如下图所示。

Java课程设计-时钟图形模拟

课程设计任务书

目录 1 设计内容及要求 (1) 1.1 设计内容 (1) 1.2 设计目的及意义 (1) 2 概要设计 (1) 2.1功能简介 (1) 2.2功能说明: (1) 2.3 总体程序框图 (2) 3 设计过程 (3) 3.1各个模块程序流程图 (3) 3.2运行界面及关键代码 (4) 4设计结果与分析 (6) 4.1设计结果 (6) 4.2分析 (6) 5 总结 (7) 6 参考文献 (7) 附程序清单及源程序 (8)

1 设计内容及要求 1.1 设计内容 通过编程最终使电脑屏幕显示模拟时钟,并正常运行显示表针时间,电脑上呈现一个图种的模型表示电脑上的时间,并可以模拟时钟走动。 1.2 设计目的及意义 设计目的及意义:熟悉Visual c++ 6.0软件的应用,C语言相关函数,语句的学习,查找资料代码等,编程、调试、运行、效果显示调整,完成上传,熟悉编程语言,了解程序运行以及图像显示等C语言的应用,通过编程实现既定功能。培养自学能力,独立思考能力,将理论形成实际运用,同时可以掌握下列运算符的使用: 1 .数据类型(整形、实型、字符型、指针、数组、结构等)。 2 .运算类型(算术运算、逻辑运算、自增自减运算、赋值运算等)。 3 .程序结构(顺序结构、判断选择结构、循环结构) 5 .复杂任务功能分解方法(自顶向下逐步求精、模块化设计、信息隐藏等)。 6 .学会编制结构清晰、风格良好、数据结构适当的C语言程序。 2 概要设计 2.1功能简介 实现功能如下: (1)在屏幕上最终显示一个图形时钟(用程序绘制一个与时钟样式相似即可),能模拟机械钟表行走。 (2)数字式显示时间与指针式显示时间一致,且各指针运动规律正确。 (3)能准确的利用数字显示时间和日期。 (4)按ESC可以退出程序。 2.2功能说明: 内容:指针式时钟模块完成在屏幕上显示一个活动时钟,模拟机械钟表行走,时针,分针,秒针不同颜色且顺时针旋转,获取系统时间;数字式时钟模块完成显示时间格式年月日时分秒,小时为24小时制,分和秒为60进制与指针式的时

基于LinuxQT图形图像课程设计

郑州科技学院QT课程设计 题目制作画图工具学生姓名 专业班级 学号 所在系 指导教师 完成时间年月日

目录 1概述 (1) 1.1项目名称 (1) 1.2 画图工具基本框架 (1) 1.3 画图工具功能介绍 (2) 1.3.1菜单 (2) 1.3.2线型选择 (3) 1.3.3画笔宽度 (3) 1.3.4画笔颜色 (3) 1.3.5清空画板 (3) 1.3.6绘制图形 (3) 1.3.7橡皮擦 (3) 1.3.8坐标定位 (3) 1.4 制作画图工具使用的编程语言 (4) 1.5 编译环境 (4) 1.6 使用QT编程语言制作画图工具的优势 (4) 1.7 项目制作过程中应用到的QT知识 (4) 1.7.1信号与槽 (4) 1.7.2对话框 (4) 1.7.3创建主窗口 (4) 1.7.4自定义窗口部件 (4) 1.7.5布局管理 (5) 1.7.6 QT中的事件机制 (5) 1.7.7二维图形的绘制 (5)

1.8 项目中建立的类 (5) 1.9 类之间的相互关系 (5) 2 总体设计 (6) 2.1 主窗口 (6) 2.1.1创建主窗口 (6) 2.1.2添加菜单 (6) 2.1.3添加子菜单 (6) 2.1.4创建状态栏 (7) 2.2悬浮窗 (7) 2.2.1线型选项 (7) 2.2.2画笔宽度调节 (8) 2.1.3画笔颜色选择 (8) 2.2.4清空画板 (9) 2.2.5绘制图形 (9) 2.2.6橡皮擦 (9) 2.3 画板 (10) 2.3.1画布的创建 (10) 2.3.2画布的颜色初始化 (10) 2.3.3画板大小 (10) 3详细设计 (10) 3.1子菜单功能的实现 (10) 3.1.1 New功能的实现 (10) 3.1.2 Open 功能的实现 (11) 3.1.3 Save 功能的实现 (11) 3.1.4 SaveAs 功能的实现 (12)

计算机图形学课程设计报告简单图形的绘制

《计算机图形学》课程设计 报告 学生:学号: 学 院: 班 级: 题 目: 简单图形的绘制 职称 2015年7月1日

目录 目录.............................................. I 一、选题背景 (1) 二、算法设计 (2) 2.1 绘制直线、圆、椭圆、抛物线 (2) 2.1.1 绘制直线 (2) 2.1.2 绘制圆 (2) 2.1.3 绘制椭圆 (2) 2.1.4 绘制抛物线 (2) 2.2 三维几何变换 (2) 三、程序及功能说明 (5) 3.1 绘制直线、圆、椭圆、抛物线 (5) 3.1.1 绘制直线 (5) 3.1.2 绘制圆 (5) 3.1.3 绘制椭圆 (6) 3.1.4 绘制抛物线 (6) 3.2 图形的平移 (6) 3.3 图形的旋转 (7) 3.4 图形的缩放 (7) 四、结果分析 (8) 4.1 绘制直线、圆、椭圆、抛物线 (8) 4.1.1 直线 (8) 4.1.2 圆 (8)

4.1.3 椭圆 (9) 4.1.4 抛物线 (9) 4.2 图形的平移 (9) 4.3 图形的旋转 (10) 4.4 图形的缩放 (12) 五、总结 (11) 六、课程设计心得体会 (15) 参考文献 (16) 源程序 (17)

一、选题背景

二、算法设计 2.1 绘制直线、圆、椭圆、抛物线 2.1.1 绘制直线 通过两个点的坐标来绘制直线。计算机图形学中二维图形在显示输出之前需要扫描转换,生成直线的算法一般有DDA 算法和中点算法。 2.1.2 绘制圆 通过运用圆的参数方程cos ;sin x a r y b r θθ=+=+来绘制圆的图形,其中[0,2]θπ∈, (a,b )为圆心,r 为半径,运用参数方程,只需要确定半径的长度和圆心的位置,即可绘制出圆。 2.1.3 绘制椭圆 通过运用椭圆的参数方程cos ;sin x a y b θθ==来绘制椭圆的图形,其中 [0,2]θπ∈,是已知的变量,a ,b 分别为长半轴,短半轴,当确定a 和b 后,通过参数方程即可得到这个椭圆的方程。 2.1.4 绘制抛物线 根据点绘制抛物线图像是通过拟合完成,根据三个点的坐标,通过数据拟合,得到经过这三个点的函数关系式,从而再根据这个函数关系式绘制出抛物线上其他的点,形成一条连续的抛物线;或直接根据已知函数绘制图像是通过已知函数画出图像。 2.2 三维几何变换 三维几何变换是二维几何变换的推广。二维几何变换在齐次坐标空间中 可用3?3的变换矩阵表示,类似的,三维几何变换在齐次坐标空间中可用4?4的变换矩阵表示。三维空间中的点(),,x y z 的齐次坐标定义为(),,h h h x y z ,其中,h 为不等与零的任意常数,h x hx =,h y hy =,h z hz =。亦即点(),,x y z 对

计算机图形学课程设计

一、图形基本变换原理 1.平移变换 将图形对象从一个位置(x, y)移到另一个位置(x ′,y ′)的变换,只改变图 形的位置,不改变图形的大小和形状 。 将矩形沿x 轴方向平移tx ,沿y 轴方向的平移距离为ty 。它只改变物体的 位置,不改变物体的大小和形状。 平移变换的公式为:?????+Y =Y +X =X y x t t '' 2.旋转变换 不改变物体的形状和大小,是一种刚性变换。 设P 点的坐标为(x ,y ),使P 点绕坐标原点逆时针旋转θ角(θ>0)到达 P ′点 其计算公式为: x ′=xcos θ-ysin θ y ′=xsin θ+ycos θ 3.比例变化 使图形按在x 和y 坐标轴方向分别按比例因子Sx 和Sy 放大或缩小的变换。 改变图形的大小和形状。 设平面上的一个点P 的坐标为(x, y ),经过比例变换后的坐标是(x ′, y ′),其计算公式为: x ′=x ·Sx y ′=y ·Sy 其中,Sx 和Sy 为比例因子。 当Sx =Sy =1时:恒等比例变换 当Sx =Sy >1时:沿x ,y 方向等比例放大。 当Sx =Sy <1时:沿x ,y 方向等比例缩小 当Sx ≠Sy 时:沿x ,y 方向作非均匀的比例变换,图形变形 二、实现代码 #include #include void DrawStar(float x, float y, float r, float b){ int i; float px[19],py[19]; for(i = 2; i <= 16;i = i + 2){ px[i] = x + r * sin((i - 1) * M_PI / 8 + b);

用matlab实现图像灰度变换课程设计讲解

课程设计报告册 课程名称: MATLAB课程设计 课题名称:灰度变换增强 专业班级: 姓名: Bob Wang 学号: 15164 课程设计主要场所:信息楼220 时间: 指导教师:成绩:

前言 数字图像处理技术是20世界60年代发展起来的一门新兴学科,随着图像处理理论和方法的进一步完善,使得数字图像处理技术在各个领域得到了广泛应用,并显示出广阔的应用前景。MATLAB既是一种直观、高效的计算机语言,同时又是一个科学计算平台。它为数据分析和数据可视化、算法和应用程序开发提供了最核心的数学和高级图形工具。根据它提供的500多个数学和工程函数,工程技术人员和科学工作者可以在它的集成环境中交互或变成以完成各自的计算。MATLAB中集成了功能强大的图像处理工具箱。由于MATLAB语言的语法特征与C语言极为相似,而且更加简单,更加符合科技人员对数学表达式的书写格式,而且这种语言可移植性好、可扩展性强,再加上其中有丰富的图像处理函数,所以MATLAB在图像处理的应用中具有很大的优势。 MATLAB是一种以矩阵运算为基础的交互式程序语言,能够满足科学、工程计算和绘图的要求,与其它计算机语言相比,其特点是简洁和智能化,适应科技专业人员的思维方式和书写习惯,使得编程和调试效率大大提高。我们学习掌握MATLAB,也可以说是在科学工具上与国际接轨。

目录 一、课程设计目的 (2) 二、设计任务及内容 (2) 三、课题设计实验条件 (3) 四、涉及知识 (3) 五、具体设计过程及调试 (4) 5.1、图像的读入和显示 5.1.1、打开图像 (4) 5.1.2、显示原图像 (5) 5.1.3、图像灰度处理 (7) 5.1.4、显示灰阶后图像 (8) 5.2、直方图均衡化 5.2.1、生成直方图 (10) 5.2.2、直方图均衡化 (12) 5.3、灰度变换 5.3.1、线性变换 (9) 5.3.2、分段线性变换 (9) 5.3.3、非线性变换.................................... (9) 六、心得体会 (17) 七、参考文献 (18) 八、程序清单 (19)

基于java综合图像处理课程设计

成绩评定表 学生姓名** 班级学号****** 专业通信工程课程设计题目基于JAVA的综合图像处理的设计与实现 评 语 组长签字: 成绩 日期20 年月日

课程设计任务书 学院信息科学与工程学院专业通信工程学生姓名*** 班级学号 **** 课程设计题目基于JAVA的综合图像处理的设计与实现 实践教学要求与任务: 1、熟悉综合图像处理的基本原理 2、熟悉Java的环境 3、在Java环境中仿真实现综合图像处理 4、运行、调试综合图像处理 5、对综合图像处理进行结果验证及分析 工作计划与进度安排: 12月1日熟悉设计任务、查阅资料、进行原理分析及可行性论证 12月2日~3日在Java环境中仿真实现综合图像处理 12月4日验收、答辩、提交报告 指导教师: 201 年月日专业负责人: 201 年月日 学院教学副院长: 201 年月日

目录 1 背景及意义 (1) 2 设计原理及设计方案 (2) 2.1图像增强 (2) 2.1.1 图像平滑处理 (2) 2.1.2 图像锐化处理 (3) 2.2边缘检测 (5) 3 设计过程 (6) 3.1对图像进行平滑处理 (6) 3.2对图像进行锐化处理 (7) 3.3对图像进行边缘检测 (7) 4 结论 (8) 参考文献 (9) 附录:程序源代码 (10)

1 背景及意义 图形图像信息是人类获得外界信息的主要来源,因为大约有70%的信息是通过人眼获得的,而人眼获得的都是图形图像信息。在近代科学研究、军事技术、工农业生产、医学、气象及天文学领域中,人们越来越多地利用图形图像信息来认识和判断事物,解决实际问题。本设计能实现基本的绘画功能以及图形图像的基本编辑。 本文是基于Java图形图像处理软件,Java编程语言是一种跨平台的编程语言,在编写图形用户界面方面,也要支持跨平台功能。为此Java提供了强大而丰富的AWT包和Swing包,使得Java功能越来越强大,界面越来越美观。Java图形图像用户界面的编写普遍采用构件化思想来进行,AWT和Swing本身提供的也是许多标准的构件和容器。本软件将所学的理论知识与实际应用相结合,运用Java编程语言,实现读入图片、滤镜处理功能、边缘处理功能、图像还原功能,以达到图形处理的目的。 课题研究的目的及意义 随着科学技术的不断发展,计算机的更新速度不断提高,人们的思想文化素质的提高,对图形图像的要求也越来越高。因此把原始图形图像与计算机结合起来,从而创作出许多更加完美的图像,满足人们的需求,计算机图形图像处理,是指利用计算机对图像图像进行一系列加工,以便获得人们所需要的效果。图形图像是人们获取和交换信息的主要来源,人类感知外界信息,80%以上是通过视觉得到的。因此,图形图像处理的应用领域必然涉及到人类生活和工作的方方面面。图形图像是用各种观测系统以不同形式和手段观测客观世界而产生视知觉的实体。比如人的视觉就是以观测系统,通过它得到的图形图像就是客观景物在人心目中形成的影像。视觉是人类观察世界、认知世界的重要功能手段。图形图像带有大量的信息,为此开发这个图形图像处理软件,能过处理一些图形图像,并对图形图像处理技术此方面进行深入的研究。

基于LinuxQT图形图像课程设计

QT课程设计 题目制作画图工具 学生姓名______________ 专业班级____________ 学号__________________ 所在系 ________________ 指导教师_________________ 完成时间年月曰 目录 1概述..................................... 1 ......................... 1.1项目名称............................... 1 .................... 1.2画图工具基本框架........................ 1 ..............

1.3画图工具功能介绍........................ 2 ........... 1.3.1 菜单......................................... 2 ............... 1.3.2 线型选择22222222222222222232222 1.3.3画笔宽度22222222222222222232222 1.3.4 画笔颜色22222222222222222232222 1.3.5 清空画板22222222222222222232222 1.3.6 绘制图形22222222222222222232222 1.3.7橡皮擦22222222222222222223 2222 1.3.8 坐标定位22222222222222222232222 1.4 制作画图工具使用的编程语言2222222222242 1.5 编译环境222222222222222222 422222 1.6 使用QT 编程语言制作画图工具的优势22222224 1.7 项目制作过程中应用到的QT 知识222222222 42 1.7.1 信号与槽22222222222222222242222 1.7.2 对话框22222222222222222224 2222 1.7.3 创建主窗口22222222222222222 42222 1.7.4 自定义窗口部件22222222222222224 222 1.7.5布局管理...................................... -5 1.7.6 QT中的事件机制.................................. 5 - 1.7.7二维图形的绘制------------------------------------ 5- 1.8 项目中建立的类--------------------------- 5 1.9 类之间的相互关系-------------------------- 5-

计算机图形学课程设计----课程设计

计算机图形学课程设计 学院:计算机科学学院 班级: 学号: 学生姓名: 指导教师:

2008年1月 设计一 一、课题说明 用所学算法编写实现图形比例,移动,旋转变换的程序 二、概要设计 比例变换矩阵: 移动变换矩阵: 旋转变换矩阵: 由于在640*480默认的显示模式下,原点(0,0)坐标在屏幕的左上角,左上角向右下角走,x 值增大,左上角向右上角走,y 值增大。为了便于显示与理解,把原点定在(320,240)点。则移动变换与旋转变换的矩阵就会改变。 旋转变换后,x 坐标变为:320+(x-320)*cos(a)-(240-y)*sin(a); y 坐标变为:240-(x-320)*sin(a)-(240-y)*cos(a) 本程序通过一个三角形比例,移动,旋转变换演示比例,移动,旋转后的结果。 首先画出需要变换的三角形(通过给出三角形的三个顶点画出三角形),对三个三角形的顶点变换实现比例,移动,旋转变换操作。 三、源程序及注释 #include #include /*加入c 图形库*/

#include yidong(int dx,int dy)/*实现移动函数*/ { moveto(320+dx,240-dy); lineto(420+dx,120-dy); lineto(450+dx,140-dy); lineto(320+dx,240-dy);/*变换三角形三个点的坐标实现移动变换*/ } bilie(float Sx,float Sy) /*实现比例函数*/ { moveto(320*Sx,240*Sy); lineto(420*Sx,120*Sy); lineto(450*Sx,140*Sy); lineto(320*Sx,240*Sy); /*变换三角形三个点的坐标实现比列变换*/ } xuanzhuan(float a) /*实现旋转函数*/ { float p; moveto(320,240); lineto(320+(420-320)*cos(a)-(240-120)*sin(a),240-(420-320)*sin(a)-(240-120)*cos(a)); lineto(320+(450-320)*cos(a)-(240-140)*sin(a),240-(450-320)*sin(a)-(240-140)*cos(a)); lineto(320,240); /*变换三角形三个点的坐标实现旋转变换*/ } main() { int i,j; float X,Y,bx,by,a; int gdriver=DETECT,gmode; /*初始化显示模式参数*/ initgraph(&gdriver,&gmode,""); /*初始化显示为默认的640*480、16色模式*/ i=20; j=240; moveto(i,j); for(i=20;i<=620;i+=20) /*使用双循环画点函数画出表格中的纵坐标*/ lineto(i,240); i=320; j=20; moveto(i,j); for(j=20;j<=460;j+=20) /*使用双循环画点函数画出表格中的横坐标*/ lineto(320,j); moveto(320,240);

计算机图形学课程设计

《计算机图形学》课程设计 (2015----2016学年第二学期) 学院 专业班级 学号 学生姓名 老师 编写日期:2016年xx月xx日

目录 真实感游戏场景绘制 (3) 一实验目的 (3) 二实验内容 (3) 三实验分工 (4) 四理论基础 (4) 1雾化模型 (4) 2颜色模型 (5) 3光照模型 (6) 4纹理模型 (6) 五系统描述 (13) 1墙壁、地面、箱子 (13) 2石柱、雪人 (14) 3玻璃球 (15) 4天空 (17) 六心得体会 (19) 七附录:程序源代码 (19) 2/ 45

真实感游戏场景绘制 【摘要】本次课程设计绘制了一个真实感的三维场景,并实现场景漫游。主要绘制了墙壁与地面、天空、石柱、箱子、玻璃球、雪人、雾等对象。以Visual Studio2012为平台用OpenGL基础知识实现此真实感场景的绘制。 一实验目的 1.熟悉OpenGL基础函数,并了解其用法。 2.通过程序模拟真实感游戏场景,掌握图形综合展示效果,基于专业背景,结合实验课内容与课程设计要求,使用OpenGL绘制简单的3D真实感游戏场景,包括光栅化算法、多边形裁剪计算以及消隐算法在场景绘制中的应用。 二实验内容和效果 光栅化算法、多边形裁剪计算以及消隐算法在场景绘制中的应用,其中真实感场景绘制包括颜色模型、纹理模型、雾化模型、运动模型以及环境光、漫反射、镜面反射等光照模型设置。 图1 游戏场景整体效果

三实验分工 本次课程设计实验,小组成员齐心协力。首先从自己尝试编写没有成功到后来的各种搜集资料,寻找3D游戏场景的绘制代码,到最后小组成员分工解析代码并注释,做PPT,演讲PPT等,大家合作都很用心。这次的实验中我们小组每个成员在每一个环节都参与任务,因代码过多,也都参与到代码解析中。具体安排如下: 四理论基础 1雾化模型 OpenGL中提供了完整的雾化接口,我们只需要选择合适的雾气的混合因子、密度、颜色、起始位置等。在OpenGL中,雾的工作模式有两种:线性模式和指数模式。这两种模式是根据雾的浓度变化来区分的。 在线性模式下,只需要提供一个距离视点的开始位置和结束位置。从开始位置到结束位置之间,雾的浓度越来越高,浓度的变化和距离成正比。 在指数模式下,雾的浓度随着距离的增加呈指数增长。这种模式通常用来用于烟雾、烟幕等效果。 glFogf(GL_FOG_START, 1.0f)确定了雾的开始初离屏幕有多近。 glFogf(GL_FOG_END, 5.0),它告诉OpenGL雾能离开屏幕有多远 glHint(GL_FOG_HINT, GL_DONT_CARE)确定了雾的渲染方式,使用 GL_DONT_CARE是因为并不关心建议值。这个项的不同值之间的区别: GK_DONT_CARE:让OPENGL自己来确定雾的渲染方式,每顶点或是每像素。 4/ 45

计算机图形课程设计报告

《计算机图形学》 课程设计 项目题目:圆内动态颜色填充 专业:计算机科学与技术 学号: 112054141 姓名:汪智 指导教师:李丽亚 2014年6月

目录 一、项目概述 二、项目需求 三、项目设计 四、项目效果 五、算法改进 六、项目总结

填充算法用于内部定义区域,以改变整个区域的颜色属性,它把区域内的原像素点值改变成另一种像素点值。算法中,读出像素点(x; y)像素点值。 此算法所采用的基本方法是首先确定(x; y)点的像素点是否在区域内尚未被访问过的那一部分之中,也就是说,如果这个像素点的值是原始值old-value,则需要把它改为填充的值new-value,然后按区域性质先后访问其相邻的像素点,当访问其中每一个近邻像素点时,都要进行递归调用。 填充算法,其基本思想是:从图形的一个内点开始,由内向外用给定的颜色画点直到边界为止。如果边界是以一种颜色指定的,则种子填充算法可逐个像素地处理直到遇到边界颜色为止。 从区域内任意一点出发,通过各方向到达区域内的任意像素。 二、项目需求 计算机图形学:(Computer Graphics,简称CG)是一种使用数学算法将二维或三维图形转化为计算机显示器的栅格形式的科学。 计算机图形学的主要研究内容就是研究如何在汁算机中表示图形、以及利用计算机进行图形的计算、处理和显示的相关原理与算法。图形通常由点、线、面、体等几何元素和灰度、色彩、线型、线宽等非几何属性组成。从处理技术上来看,图形主要分为两类,一类是基于线条信息表示的。如工程图、等高线地图、曲面的线框图等,另一类是明暗图,也就是通常所说的真实感图形。 计算机图形学一个主要目的就是要利用计算机产生令人赏心悦目的真实感图形。为此,必须建立图形所描述场景的几何表示,再用某种光照模型,计算在假想的光源、纹理、材质属性下的光照明效果。同时,真实感图形计算的结果是以数字图像的方式提供的,计算机图形学也就和图像处理有着密切的关系。 计算机图形学的研究内容非常广泛,如图形硬件、图形标准、图形交互技术、光栅图形生成算法、曲线曲面造型、实体造型、真实感图形计算与显示算法、非真实感绘制,以及科学计算可视化、计算机动画、自然景物仿真、虚拟现实等。 三、项目设计 首先,创建Test MFC工程,在工程中的Testview找到OnDraw 开始画图。用函数Ellipse先作一个大圆,使圆大概在对话框的中央。然后再创建一个画笔和画刷,画笔使圆边界加粗加色,画刷使边界内填充颜色。接着用相同的方法再画四个同心圆,使每个圆的边界颜色不同,边界内填充的颜色也不同,这样就使的后画的圆覆盖了前面一个圆圆内的填充颜色,以达到不同颜色圆的效果。其次,用for(int i=0;i<100;i++)语句设置圆渐变特效,用“Sleep(300);”设置圆变色的快慢。最后,添加上自己想要添加上的文本的内容,比如“happy everyday !”、“(made by WZ<112054141>)”。用“pDC->SetTextColor(RGB(124,252, 0));”课随意设置文本的颜色。可以把“happy everyday !”放在for(int i=0;i<100;i++)语句之中,以便达到同时进行动态的效果。

相关文档
最新文档