云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > C#WinForm编程(3).第33章使用GDI+绘图

C#WinForm编程(3).第33章使用GDI+绘图

  • 62 次阅读
  • 3 次下载
  • 2025/7/15 12:16:22

括ForwardDiagonal、Cross、Diagonal Cross、SmallConfetti和ZigZag。构造影线画笔的示例如下所示。 Brush crossBrush = new HatchBrush(HatchStyle.Cross, Color.Azure); // background color of CrossBrush is black Brush brickBrush = new HatchBrush(HatchStyle.DiagonalBrick, Color.DarkGoldenrod, Color.Cyan); GDI只能使用实线和影线画笔,GDI+添加了两种新画笔: ● System.Drawing.Drawing2D.LinearGradientBrush用一种在屏幕上可变的颜色填充区域。 ● System.Drawing.Drawing2D.PathGradientBrush与此类似,但其颜色沿着要填充的区域的路径而变化。 如果细心使用,这些画笔会得到一些惊人的效果。 33.7.2 钢笔 与画笔不同,钢笔只用一个类System.Drawing.Pen来表示。但钢笔比画笔复杂一些,因为它需要指定线条应有多宽(像素),对于一条比较宽的线段,还要确定如何填充该线条中的区域。钢笔还可以指定其他许多属性,本章不讨论它们,其中包括前面提到的Alignment属性,该属性表示相对于图形的边框,线条该如何绘制,以及在线条的末尾绘制什么图形(是否使图形光滑过渡)。 粗线条中的区域可以用纯色填充,或者使用画笔来填充。因此Pen实例可以包含Brush实例的引用。这是非常强大的,因为这表示我们可以绘制有影线填充或线性阴影的线条。构造Pen实例有四种不同的方式:可以传送一种颜色,或者传送一个画笔。这两个构造函数都会生成一个像素宽的钢笔。另外,还可以传送一种颜色或画笔,以及一个表示钢笔宽度的float类型的值。(该宽度必须是一个float类型的值,以允许执行绘图操作的Graphics对象使用非默认的单位,例如毫米或英寸,例如可以指定宽度是英寸的某个分数)。例如,可以构造如下的钢笔: Brush brickBrush = new HatchBrush(HatchStyle.DiagonalBrick, Color.DarkGoldenrod, Color.Cyan); Pen solidBluePen = new Pen(Color.FromArgb(0,0,255)); Pen solidWideBluePen = new Pen(Color.Blue, 4); Pen brickPen = new Pen(brickBrush); Pen brickWidePen = new Pen(brickBrush, 10); 另外,为了快速构造钢笔,还可以使用类System.Drawing.Pens,它与Brushes类一样,包含许多存储好的钢笔。这些钢笔的宽度都是一个像素,使用通常的Web安全颜色,这样就可以用下述方式构建一个钢笔: Pen solidYellowPen = Pens.Yellow; 33.8 绘制图形和线条 前面介绍了在屏幕上绘制规定的图形所需要的所有基类和对象。下面复习一些Graphics类可以使用的绘图方法,用一个小示例来介绍几个画笔和钢笔。 System.Drawing.Graphics 有很多方法,利用这些方法可以绘制各种线条、空心图形和实心图形。表33-4所示的列表并不完整,但给出了主要的方法,您应能据此掌握绘制各种图形的方法。 表 33-4 方 法 DrawLine 终点 DrawRectangle 大小 DrawEllipse 大小 FillRectangle 大小 FillEllipse 大小 DrawLines DrawBezier 钢笔、点数组 钢笔、4个点 一组线,把数组中的每个点按顺序连接起来 通过两个端点的一条光滑曲线,剩余的两个点用于控制曲线的形状 DrawCurve DrawArc 钢笔、点数组 钢笔、矩形、两个角 DrawClosedCurve 钢笔、点数组 线 DrawPie 钢笔、矩形、两个角 FillPie 画笔、矩形、两个角 矩形中的实心楔形 矩形中的空心楔形 与DrawCurve一样,但还要绘制一条用以闭合曲线的直通过点的一条光滑曲线 由角度定义的矩形中圆的一部分 画笔、位置和实心椭圆 画笔、位置和实心矩形 钢笔、位置和空心椭圆 钢笔、位置和空心矩形 常 见 参 数 钢笔、起点和绘制的图形 一段直线 DrawPolygon 钢笔、点数组 与DrawLines 一样,但还要连接第一点和最后一点,以闭合绘制的图形 在结束绘制简单对象的主题前,用一个简单示例来说明使用画笔可以得到的各种可视效果。该示例是ScrollMoreShapes,它是ScrollShapes的修正版本。除了矩形和椭圆外,我们还添加了一条粗线,用各种定制的画笔填充图形。前面解释了绘图的规则,所以这里只给出代码,而不作过多的注释。首先,因为添加了新画笔,所以需指定使用命名空间System.Drawing.Drawing2D: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Drawing.Drawing2D; using System.Text; using System.Windows.Forms; 接着是Form1类中的一些额外字段,其中包含了要绘制图形的位置信息,以及要使用的各种钢笔和画笔: private Rectangle rectangleBounds = new Rectangle(new Point(0,0), new Size(200,200)); private Rectangle ellipseBounds = new Rectangle(new Point(50,200), new Size(200,150)); private Pen bluePen = new Pen(Color.Blue, 3); private Pen redPen = new Pen(Color.Red, 2); private Brush solidAzureBrush = Brushes.Azure; private Brush solidYellowBrush = new SolidBrush(Color.Yellow); static private Brush brickBrush = new HatchBrush(HatchStyle.DiagonalBrick, Color.DarkGoldenrod, Color.Cyan); private Pen brickWidePen = new Pen(brickBrush, 10); 把BrickBrush字段声明为静态,就可以使用该字段的值初始化BrickWidePen字段了。C#不允许使用一个实例字段初始化另一个实例字段,因为还没有定义要先初始化哪个实例字段,如果把字段声明为静态字段就可以解决这个问题,因为只实例化了Form1类的实例,字段是静态字段还是实例字段就不重要了。

下面是OnPaint()重写方法:

protected override void OnPaint( PaintEventArgs e ) { base.OnPaint(e); Graphics dc = e.Graphics; Point scrollOffset = this.AutoScrollPosition; dc.TranslateTransform(scrollOffset.X, scrollOffset.Y); if (e.ClipRectangle.Top+scrollOffset.X < 350 || e.ClipRectangle.Left+scrollOffset.Y < 250) { dc.DrawRectangle(bluePen, rectangleBounds); dc.FillRectangle(solidYellowBrush, rectangleBounds); dc.DrawEllipse(redPen, ellipseBounds); dc.FillEllipse(solidAzureBrush, ellipseBounds); dc.DrawLine(brickWidePen, rectangleBounds.Location, ellipseBounds.Location+ellipseBounds.Size); } } 与以前一样,也将AutoScrollMinSize设置为(250,350),结果如图33-13所示。 图 33-13 注意,粗对角线已在矩形和椭圆上绘制出来,它需要最后一个绘制。 33.9 显示图像 使用GDI+最常想做的是显示文件中已有的图像。这确实要比绘制自己的用户界面简单多了,因为图像已经绘制好了。我们只需要加载文件,让GDI+显示它即可。图像可以只包含一个线条或一个图标,也可以比较复杂,例如一张照片。对图像也可以执行某些操作,例如拉伸或旋转图像,也可以选择只显示图像的一部分。 本节将先给出一个示例,再讨论显示图像时需要注意的一些问题。可以这么做的原因是显示图像的代码是非常简单的。 我们需要.NET的一个基类System.Drawing.Image。Image实例表示一个图像。读取图像仅需使用一行代码: Image myImage = Image.FromFile(\FromFile()是Image的一个静态成员,是实例化图像的常用方式。文件可以是任何支持的图像文件格式,包括.bmp、.jpg、.gif和.png。

搜索更多关于: C#WinForm编程(3).第33章使用GDI+绘图 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

括ForwardDiagonal、Cross、Diagonal Cross、SmallConfetti和ZigZag。构造影线画笔的示例如下所示。 Brush crossBrush = new HatchBrush(HatchStyle.Cross, Color.Azure); // background color of CrossBrush is black Brush brickBrush = new HatchBrush(HatchStyle.DiagonalBrick, Color.DarkGoldenrod, Color.Cyan); GDI只能使用实线和影线画笔,GDI+添加了两种新画笔: ● System.Drawing.Drawing2D.LinearGradientBrush用一种在屏幕上可变的颜色填充区域。 ● System.Drawing.Drawing2

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com