C#中GDI+图形图像绘制(直线、矩形、圆、椭圆、圆弧、扇形、多边形)

目录

一、直线

二、矩形

三、椭圆

四、圆

五、圆弧

六、扇形

七、多边形

八、示例源码


一、直线

调用Graphics类中的DrawLine()方法,结合Pen对象可以绘制直线。DrawLine()方法有以下两种构造函数。

  • 第一种用于绘制一条连接两个Point结构的线。当参数pt1的值小于pt2时,所绘制的线将逆向绘制。语法如下:
cs 复制代码
public void DrawLine(Pen pen,Point pt1,Point pt2)
☑ pen:Pen对象,它确定线条的颜色、宽度和样式。
☑ pt1:Point结构,它表示要连接的第一个点。
☑ pt2:Point结构,它表示要连接的第二个点。
  • 第二种用于绘制一条连接由坐标指定的两个点的线条。语法如下:
cs 复制代码
public void DrawLine (Pen pen,int x1,int y1,int x2,int y2)

|-------------|----------------------|
| 参 数 | 说 明 |
| pen | Pen对象,它确定线条的颜色、宽度和样式 |
| x1 | 第一个点的x坐标 |
| yl | 第一个点的y坐标 |
| x2 | 第二个点的x坐标 |
| y2 | 第二个点的y坐标 |

二、矩形

通过Graphics类中的DrawRectangle()方法,可以绘制矩形图形。该方法可以绘制由坐标对、宽度和高度指定的矩形。当参数width和height的值为负数时,矩形框将不在窗体中显示。语法如下:

cs 复制代码
public void DrawRectangle (Pen pen,int x,int y,int width,int height)

|-------------|----------------------|
| 参 数 | 说 明 |
| pen | Pen对象,它确定矩形的颜色、宽度和样式 |
| X | 要绘制矩形的左上角的x坐标 |
| y | 要绘制矩形的左上角的y坐标 |
| width | 要绘制矩形的宽度 |
| height | 要绘制矩形的高度 |

三、椭圆

通过Graphics类中的DrawEllipse()方法可以轻松地绘制椭圆。此方法可以绘制由一对坐标、高度和宽度指定的椭圆。语法如下:

cs 复制代码
public void DrawEllipse(Pen pen,int x,int y,int width,int height)

|-------------|----------------------|
| 参 数 | 说 明 |
| pen | Pen对象,它确定曲线的颜色、宽度和样式 |
| X | 定义椭圆边框左上角的x坐标 |
| y | 定义椭圆边框左上角的y坐标 |
| width | 定义椭圆边框的宽度 |
| height | 定义椭圆边框的高度 |

在设置画笔(pen)的粗细时,如果其值小于等于0,那么,按默认值1来设置画笔的粗细。

四、圆

画圆就是在正方形的空间里画内接的椭圆,所以还是使用Graphics类中的DrawEllipse()方法。

五、圆弧

通过Graphics类中的DrawArc()方法,可以绘制圆弧。此方法可以绘制由一对坐标、宽度和高度指定的圆弧。语法如下:

cs 复制代码
public void DrawArc(Pen pen,Rectangle rect,float startAngle,float sweepAngle)

|-------------|--------------------------------------|
| 参 数 | 说 明 |
| pen | Pen对象,它确定弧线的颜色、宽度和样式 |
| rect | Rectangle结构,它定义圆弧的边界 |
| startAngle | 从x轴到弧线的起始点沿顺时针方向度量的角(以度为单位) |
| sweepAngle | 从startAngle参数到弧线的结束点沿顺时针方向度量的角(以度为单位 |

六、扇形

通过Graphics类中的DrawPie()方法可以绘制扇形。此方法可以绘制由一个坐标对、宽度、高度以及两条射线所指定的扇形。语法如下:

cs 复制代码
public void DrawPie(Pen pen,float x,float y,float width,float height,float startAngle,float sweepAngle)

DrawPie()方法的参数说明如表

|-------------|----------------------------------------|
| 参 数 | 说 明 |
| pen | Pen对象,它确定扇形的颜色、宽度和样式 |
| X | 边框的左上角的x坐标,该边框定义扇形所属的椭圆 |
| y | 边框的左上角的y坐标,该边框定义扇形所属的椭圆 |
| width | 边框的宽度,该边框定义扇形所属的椭圆 |
| height | 边框的高度,该边框定义扇形所属的椭圆 |
| startAngle | 从x轴到扇形的第一条边沿顺时针方向度量的角(以度为单位) |
| sweepAngle | 从startAngle参数到扇形的第二条边沿顺时针方向度量的角(以度为单位) |

七、多边形

多边形是有3条或更多直边的闭合图形。例如,三角形是有3条边的多边形,矩形是有4条边的多边形,五边形是有5条边的多边形。若要绘制多边形,需要Graphics对象、Pen对象和Point(或PointF)对象数组。

  • Graphics对象提供DrawPolygon()方法。

Graphics类中的DrawPolygon()方法用于绘制由一组Point结构定义的多边形。语法如下:

cs 复制代码
public void DrawPolygon(Pen pen,Point,points) 
☑ pen:Pen对象,用于确定多边形的颜色、宽度和样式。
☑ points:Point结构数组,这些结构表示多边形的顶点。
  • Pen对象存储用于呈现多边形的线条属性,例如宽度和颜色。
  • Point对象数组存储将由直线连接的点。

如果多边形数组中的最后一个点和第一个点不重合,则这两个点指定多边形的最后一条边。

八、示例源码

cs 复制代码
//绘制:直线、矩形、圆弧、扇形、椭圆、圆、多边形
using System.Drawing.Drawing2D;

namespace _09_2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            button1.Text = "直线";
            button2.Text = "矩形";
            button3.Text = "圆弧";
            button4.Text = "扇形";
            button5.Text = "椭圆";
            button6.Text = "圆";
            button7.Text = "多边形";
        }

        //使用graphics的DrawLine()方法画直线
        private void Button1_Click(object sender, EventArgs e)
        {
            Pen blackPen = new(Color.Black, 3);				//实例化Pen类
            Point point1 = new(50, 50);						//实例化一个Point类
            Point point2 = new(140, 50);					//再实例化一个Point类
            Graphics graphics = CreateGraphics();			//实例化一个Graphics类
            graphics.DrawLine(blackPen, point1, point2);	//调用DrawLine方法绘制直线
            
            Graphics graphics1 = CreateGraphics();			//实例化Graphics类
            Pen myPen = new(Color.Black, 3);				//实例化Pen类
            graphics1.DrawLine(myPen, 190, 30, 190, 100);	//调用DrawLine方法绘制直线
        }

        //调用Graphics对象的DrawRectangle方法画矩形
        private void Button2_Click(object sender, EventArgs e)
        {
            Graphics graphics = CreateGraphics();			//声明一个Graphics对象
            Pen myPen = new(Color.Black, 8);				//实例化Pen类           
            graphics.DrawRectangle(myPen, 240, 10, 190, 90);//画矩形
        }

        //调用Graphics对象的DrawArc方法绘制圆弧
        private void Button3_Click(object sender, EventArgs e)
        {
            Graphics ghs = CreateGraphics();				 //实例化Graphics类
            Pen myPen = new(Color.Black, 3);				 //实例化Pen类
            ghs.SmoothingMode = SmoothingMode.AntiAlias;//圆滑效果优化
            Rectangle myRectangle = new(350, 20, 420, 90);   //定义一个Rectangle结构           
            ghs.DrawArc(myPen, myRectangle, 210, 120);       //绘制圆弧
        }

        //使用Graphics的DrawPie方法绘制扇形
        private void Button4_Click(object sender, EventArgs e)
        {
            Graphics ghs = CreateGraphics();
            Pen mypen = new(Color.Black, 3);
            ghs.DrawPie(mypen, 730, 20, 120, 100, 210, 120);
        }

        //使用Graphics 的DrawEllipse绘制椭圆
        private void Button5_Click(object sender, EventArgs e)
        {
            Graphics graphics = CreateGraphics();
            Pen myPen = new(Color.Black, 3);
            graphics.SmoothingMode = SmoothingMode.AntiAlias;//圆滑效果优化
            graphics.DrawEllipse(myPen, 970, 30, 100, 50);
        }

        /// <summary>
        /// 画圆就是在正方形里画内接椭圆
        /// 使用Graphics 的DrawEllipse方法在正方形空间里绘制圆
        /// </summary>
        private void Button6_Click(object sender, EventArgs e)
        {
            Graphics graphics = CreateGraphics();
            Pen myPen = new(Color.Black, 3);
            graphics.SmoothingMode = SmoothingMode.AntiAlias;//圆滑效果优化
            graphics.DrawEllipse(myPen, 1210, 5, 90, 90);
        }

        //调用Graphics对象的DrawPolygon方法绘制一个多边形
        private void Button7_Click(object sender, EventArgs e)
        {
            Graphics ghs = CreateGraphics();	//实例化Graphics类
            Pen myPen = new(Color.Black, 3);	//实例化Pen类
            Point point1 = new(1435, 20);		//实例化Point类
            Point point2 = new(1395, 50);
            Point point3 = new(1435, 80);
            Point point4 = new(1515, 80);
            Point point5 = new(1555, 50);
            Point point6 = new(1515, 20);
            Point[] myPoints =                  //创建Point结构数组
                { point1, point2, point3, point4, point5, point6 };
            ghs.DrawPolygon(myPen, myPoints);
        }
    }
}
相关推荐
有梦想的骇客2 小时前
书籍将正方形矩阵顺时针转动90°(8)0605
线性代数·算法·矩阵
有梦想的骇客2 小时前
书籍“之“字形打印矩阵(8)0609
java·算法·矩阵
Chenyu_3103 小时前
12.找到字符串中所有字母异位词
c语言·数据结构·算法·哈希算法
苏三福3 小时前
yolo11-seg ultralytics 部署版本
算法·yolo11
门前云梦4 小时前
《C语言·源初法典》---C语言基础(上)
c语言·开发语言·学习
sjtu_cjs5 小时前
Tensorrt python api 10.11.0笔记
开发语言·笔记·python
哆啦A梦的口袋呀5 小时前
深入理解系统:UML类图
开发语言·python·uml
虎冯河6 小时前
怎么让Comfyui导出的图像不包含工作流信息,
开发语言·python
coding随想6 小时前
JavaScript中的原始值包装类型:让基本类型也能“变身”对象
开发语言·javascript·ecmascript