首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

1.3  创建梯度

在前面的章节中,我们给出了一些通过SolidBrush对象创建红色实心长方形的代码示例。GDI+允许程序员使用特殊的梯度画笔来创建线性和路径梯度以产生丰富的色彩,从而避免了程序只是使用单调色彩的情形,梯度画笔可以带来非常有趣的效果。

GDI+具有创建水平的、垂直的和倾斜的线性梯度的特点。可以创建色彩变化均一(默认行为)的线性梯度,也可以使用梯度画笔的Blend属性创建色彩变化不均一的梯度。

下面的示例代码展示了如何创建色彩变化均一的梯度画笔,并使用该画笔从左上角到右下角绘制了一个色彩从红色变换到蓝色的长方形。

Dim Graph as Graphics

Dim LinGrBrush As Drawing2D.LinearGradientBrush

Graph = Graphics.FromHwndPicSource.Handle)

LinGrBrush = New Drawing2D.LinearGradientBrush( _

New Point(10, 20), 'Start Gradient Point

New Point(23, 27), ' End Gradient Point

Color.FromArgb(255, 255, 0, 0), ' Red

Color.FromArgb(255, 0, 0, 255)) ' Blue

Graph.FillRectangle(LinGrBrush, 10, 20, 13, 7)

 注意

该示例代码最重要的部分是使用Color对象的FromArgb方法来定义色彩。正如我们所看到的那样,GDI+的每一种色彩都是由4个值定义的:红色值(red)、绿色值(green)和蓝色值(blue)(即RGB值),它们由标准的GDI函数使用;另外一个值是α值,它定义了色彩的透明性。在前述的示例中,我们对两个色彩值均使用了255的α值,因此它们将全部是不透明的。如果使用128的α值,将会产生半透明的色彩,因而任何隐藏在长方形下面的图形都将会透过该长方形而凸显出来。把α值设置为0意味着色彩将是完全透明的或完全不可见的。而0~255之间的α值使得色彩产生不同程度的透明效果。

路径梯度可以允许我们使用由某个特定路径定义的色彩模式来填充图形。路径可以由点、椭圆形和长方形组成,并且为了产生许多不同的效果,我们可以为路径中心指定一种色彩,同时为路径上的每个点指定一种不同的色彩。

为了使用梯度路径绘制图像,必须基于GraphicsPath对象创建一个PathGradientBrush对象,而GraphicsPath对象则由一系列直线、曲线和图形定义。此处的代码展示了如何使用梯度绘制一个与前述示例中类似的长方形,该梯度的起点为长方形的中心并且其色彩为绿色,终点为长方形的边缘并且其色彩为蓝色:

Dim Graph As Graphics

Dim RectSquare As Rectangle

Dim GraphPath As Drawing2D.GraphicsPath

Dim BrushSquare As Drawing2D.PathGradientBrush

Graph = Graphics.FromHwnd(PicSource.Handle)

' Create A Path Consisting Of One Rectangle

GraphPath = New Drawing2D.GraphicsPath()

RectSquare = New Rectangle(10, 20, 23, 27)

GraphPath.AddRectangle(RectSquare)

BrushSquare = New Drawing2D.PathGradientBrush(GraphPath)

BrushSquare.CenterColor = Color.FromArgb(255, 0, 255, 0)

BrushSquare.SurroundColors = Color.FromArgb(255, 0, 0, 255)

' Create the rectangle from the path

Graph.FillPath(BrushSquare, GraphPath)

 注意

我们不打算在此详细讨论画笔和路径。至于如何使用这些特征,请参见.NET SDK文档的其他示例。如果想要对该问题有一个全面的了解,请参见在线帮助内容里的“System.Drawing.Drawing2D Hierarchy”部分。

在接下来的章节中,我们将讨论冲突检测问题。之后,您将了解到编写第一个游戏程序所必需的全部基本概念。

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论