路径就是定多个路径点,比如用直线画一个五角星。
路径由System.Drawing.Drawing2D命名空间的GraphicsPath类实现。路径的紫图行可以是直线、弧、椭圆、矩形等几何图形。如果起点和终点闭合,则称之为闭合路径,否则称之为开放路径。
GraphicsPath类常见的属性和方法:(很重要)
画一个五角星
private void wujiaoxing_Click(object sender, EventArgs e) { // 定义存储点数组 Point[] pr = new Point[10]; // 填充数组 pr[0] = new Point(120,46); pr[1] = new Point(156, 46); pr[2] = new Point(168, 10); pr[3] = new Point(180, 46); pr[4] = new Point(214, 46); pr[5] = new Point(188, 70); pr[6] = new Point(198, 106); pr[7] = new Point(168, 82); pr[8] = new Point(138, 104); pr[9] = new Point(150, 70); // 实例画五角星的对象 GraphicsPath path = new GraphicsPath(); //绘制(小于8的原因是,i最大为9) for (int i = 0; i <= 8; i++) { // 添加路径点 path.AddLine(pr[i],pr[i+1]); } // 闭合当前图形 path.CloseFigure(); // 创建一个用于画图的对象 Graphics g = this.CreateGraphics(); // 实例一个画刷 SolidBrush brush = new SolidBrush(Color.Red); g.FillPath(brush,path); g.Dispose(); }
OnPaint方法
在窗体自动加载程序画图时会用到。OnPoint方法不是在自动加载函数中使用到的。而是重写。
实例:
protected override void OnPaint(PaintEventArgs e) { base.OnPaint(e); // 创建一个用于画图的对象 Graphics g = e.Graphics; Pen pen = new Pen(Color.DarkBlue,5); g.DrawEllipse(pen,20,30,230,80); }
效果图:
测试使用全部代码:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System. Drawing.Drawing2D; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace huitu { public partial class Form1 : Form { public Form1() { InitializeComponent(); } /** * 画图按钮 */ private void huatu_Click(object sender, EventArgs e) { // 创建一个用于画图的对象 Graphics g = this.CreateGraphics(); // 创建一个笔 Pen pen = new Pen(Color.Red, 5); // 设置划线起点和终点坐标 Point startPoint = new Point(50,50); Point endPoint = new Point(400, 400); // 画线 g.DrawLine(pen,startPoint, endPoint); // 释放画线动作 g.Dispose(); // 释放笔 pen.Dispose(); } /** * 清空按钮 */ private void qingchu_Click(object sender, EventArgs e) { // 创建一个用于画图的对象 Graphics g = this.CreateGraphics(); // 清除图像(参数:窗体背景颜色) g.Clear(BackColor); } // 定义委托 public delegate void drawsss(object sender, EventArgs e); public static void runPlay(drawsss dong, object sender, EventArgs e) { dong(sender,e); } /** * 画椭圆 */ private void tuoyuan_Click(object sender, EventArgs e) { // 创建一个用于画图的对象 //Graphics g = this.CreateGraphics(); // 定义画刷 //SolidBrush brush = new SolidBrush(Color.Gray); // 画椭圆需要5个参数 //g.FillEllipse(brush, 10, 10, 500, 200); // 释放画线动作 //g.Dispose(); // 释放笔 //brush.Dispose(); // (多播委托) drawsss anm_one = new drawsss(shixin_CheckedChanged); anm_one += wenli_CheckedChanged; anm_one += jianbian_CheckedChanged; anm_one += yinying_CheckedChanged; } // 定义一个画刷 //private Brush brush = new SolidBrush(Color.Gray); // 画实心 private void shixin_CheckedChanged(object sender, EventArgs e) { // 创建一个用于画图的对象 Graphics g = this.CreateGraphics(); SolidBrush brush = new SolidBrush(Color.Gold); // 画椭圆需要5个参数 g.FillEllipse(brush, 10, 10, 500, 200); } //画纹理 private void wenli_CheckedChanged(object sender, EventArgs e) { // 创建一个用于画图的对象 Graphics g = this.CreateGraphics(); TextureBrush brush = new TextureBrush(imageList1.Images[0]); // 画椭圆需要5个参数 g.FillEllipse(brush, 10, 10, 500, 200); } // 画渐变(从一种颜色变道另一种颜色) private void jianbian_CheckedChanged(object sender, EventArgs e) { // 创建一个用于画图的对象 Graphics g = this.CreateGraphics(); // 设置划线起点和终点坐标 Point startPoint = new Point(200, 200); Point endPoint = new Point(800, 800); LinearGradientBrush brush = new LinearGradientBrush(startPoint, endPoint, Color.HotPink, Color.LightBlue); // 画椭圆需要5个参数 g.FillEllipse(brush, 10, 10, 500, 200); } private void yinying_CheckedChanged(object sender, EventArgs e) { // 创建一个用于画图的对象 Graphics g = this.CreateGraphics(); HatchBrush brush = new HatchBrush(HatchStyle.DashedDownwardDiagonal, Color.SeaShell, Color.Thistle); // 画椭圆需要5个参数 g.FillEllipse(brush, 10, 10, 500, 200); } private void wujiaoxing_Click(object sender, EventArgs e) { // 定义存储点数组 Point[] pr = new Point[10]; // 填充数组 pr[0] = new Point(120,46); pr[1] = new Point(156, 46); pr[2] = new Point(168, 10); pr[3] = new Point(180, 46); pr[4] = new Point(214, 46); pr[5] = new Point(188, 70); pr[6] = new Point(198, 106); pr[7] = new Point(168, 82); pr[8] = new Point(138, 104); pr[9] = new Point(150, 70); // 实例画五角星的对象 GraphicsPath path = new GraphicsPath(); //绘制 for (int i = 0; i <= 8; i++) { // 添加路径点 path.AddLine(pr[i],pr[i+1]); } // 闭合当前图形 path.CloseFigure(); // 创建一个用于画图的对象 Graphics g = this.CreateGraphics(); // 实例一个画刷 SolidBrush brush = new SolidBrush(Color.Red); g.FillPath(brush,path); g.Dispose(); } /** * 窗体加载方法 */ private void Form1_Load(object sender, EventArgs e) { } protected override void OnPaint(PaintEventArgs e) { base.OnPaint(e); // 创建一个用于画图的对象 Graphics g = e.Graphics; Pen pen = new Pen(Color.DarkBlue,5); g.DrawEllipse(pen,20,30,230,80); } } }
这个代码就是在上一篇笔记中的例子的基础上新添加的。