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

目录

一、直线

二、矩形

三、椭圆

四、圆

五、圆弧

六、扇形

七、多边形

八、示例源码


一、直线

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

  •         第一种用于绘制一条连接两个Point结构的线。当参数pt1的值小于pt2时,所绘制的线将逆向绘制。语法如下:
public void DrawLine(Pen pen,Point pt1,Point pt2)
☑ pen:Pen对象,它确定线条的颜色、宽度和样式。
☑ pt1:Point结构,它表示要连接的第一个点。
☑ pt2:Point结构,它表示要连接的第二个点。
  •         第二种用于绘制一条连接由坐标指定的两个点的线条。语法如下:
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的值为负数时,矩形框将不在窗体中显示。语法如下

public void DrawRectangle (Pen pen,int x,int y,int width,int height)

参    数

说    明

pen

 Pen对象,它确定矩形的颜色、宽度和样式

X

要绘制矩形的左上角的x坐标

y

要绘制矩形的左上角的y坐标

width

要绘制矩形的宽度

height

要绘制矩形的高度

三、椭圆

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

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()方法,可以绘制圆弧。此方法可以绘制由一对坐标、宽度和高度指定的圆弧。语法如下:

public void DrawArc(Pen pen,Rectangle rect,float startAngle,float sweepAngle)

参    数

说    明

 pen

 Pen对象,它确定弧线的颜色、宽度和样式

 rect

 Rectangle结构,它定义圆弧的边界

startAngle

 从x轴到弧线的起始点沿顺时针方向度量的角(以度为单位)

sweepAngle

 从startAngle参数到弧线的结束点沿顺时针方向度量的角(以度为单位

六、扇形

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

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结构定义的多边形。语法如下:

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

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

八、示例源码

//绘制:直线、矩形、圆弧、扇形、椭圆、圆、多边形
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);}}
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/190449.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

状态类算法复杂排序输出

对于目标检测任务中对某一类的检测结果进行输出的时候&#xff0c;一般都是无序的&#xff0c;很明显这样子很难满足的我们的需求&#xff0c;我们更喜欢他是这样子输出的&#xff1a; &#x1f447; 我们可以看到——”按顺序输出结果“中的字段是完美的和上面图片中的识别结…

大三上oracle数据库期末复习

1、创建表空间 2、创建用户 3、用户授权 oracle数据库逻辑存储结构&#xff1a; 1、表空间&#xff08;最大的逻辑存储单元&#xff09; 创建表空间 2、段 3、盘区&#xff08;最小的磁盘空间分配单元&#xff09; 4、数据块&#xff08;最小的数据读写单元&#xff09; 用…

thinkphp 5.1 对数据库查出来的字段进行预处理

比如数据库的设计是下面这样子&#xff1a; 我想展示的是这个样子&#xff1a; 前端可以处理。 Think PHP的处理方式&#xff1a; 定义属性 &#xff1a; $this->customize 任意值;//这里的之没有作用 <?phpnamespace app\hs\controller\shop;use app\daogou\mo…

分享4个工具,轻松搞定PDF和图像中提取文本

大型语言模型已经席卷了互联网&#xff0c;导致更多的人没有认真关注使用这些模型最重要的部分&#xff1a;高质量的数据&#xff01; 本文旨在提供一些有效从任何类型文档中提取文本的技术。 Python库 本文专注于Pytesseract、easyOCR、PyPDF2和LangChain库。实验数据是一个…

计算机网络TCP篇①

目录 一、TCP 基本信息 1.1、TCP 的头格式 1.2、什么是 TCP 1.3、什么是 TCP 连接 1.4、TCP 与 UDP 的区别 1.2、TCP 连接建立 1.2.1、TCP 三次握手的过程 1.2.2、为什么是三次握手&#xff1f;不是两次&#xff1f;四次&#xff1f;&#xff08;这个问题真是典中典&am…

深度学习实战63-利用自适应混合金字塔网络实现人脸皮肤美颜效果,快速部署与实现一键美颜功能

大家好,我是微学AI,今天给大家介绍一下深度学习实战63-利用自适应混合金字塔网络实现人脸皮肤美颜效果,快速部署与实现一键美颜功能。在本文中,我将介绍一种新颖的自适应混合金字塔网络(ABPN),该网络可以实现对超高分辨率照片的快速局部修饰。该网络主要由两个组件组成:一…

你知道Canary金丝雀版本的由来吗

Canary金丝雀版本是一种软件开发中常见的概念&#xff0c;它作为一种测试和试用版&#xff0c;旨在保护用户安全性和隐私&#xff0c;同时促进创新和改进。本文主要介绍Canary版本的由来。 随着技术的不断进步&#xff0c;软件开发变得越来越复杂且困难。为了满足用户需求并提…

【渗透】记录阿里云CentOS一次ddos攻击

文章目录 发现防御 发现 防御 流量清洗 使用高防

io基础入门

压缩的封装 参考&#xff1a;https://blog.csdn.net/qq_29897369/article/details/120407125?utm_mediumdistribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-0-120407125-blog-120163063.235v38pc_relevant_sort_base3&spm1001.2101.3001.…

【数据结构(五)】递归

文章目录 1. 递归的概念2. 递归能解决什么问题3. 递归的规则4. 递归实际应用案例4.1. 迷宫问题4.2. 八皇后问题4.2.1. 思路分析4.2.1. 代码实现 1. 递归的概念 简单的说: 递归就是方法自己调用自己&#xff0c;每次调用时传入不同的变量。递归有助于编程者解决复杂的问题&…

数据结构 - 堆:TOP-K问题

问题描述 TOP-K问题&#xff1a;即求数据结合中前K个最大的元素或者最小的元素&#xff0c;一般情况下数据量都比较大 比如&#xff1a;专业前10名、世界500强、富豪榜、游戏中前100的活跃玩家等 对于Top-K问题&#xff0c;能想到的最简单直接的方式就是排序&#xff0c;但是&…

Linux部署elasticsearch集群

文章目录 一、集群规划二、安装前准备(所有节点操作)创建数据目录修改系统配置文件/etc/sysctl.conf创建用户组设置limits.conf 三、初始化配置(在节点1上操作)下载安装包解压安装包修改jvm.options文件下配置的所占内存修改集群配置文件elasticsearch.yml将安装包传到另外两个…

00后卷王真的很卷吗?

前言 都在传00后躺平、整顿职场&#xff0c;但该说不说&#xff0c;是真的卷&#xff0c;感觉我都要被卷废了... 前段时间&#xff0c;公司招了一个年轻人&#xff0c;其中有一个是00后&#xff0c;工作才一年多&#xff0c;直接跳槽到我们公司&#xff0c;薪资据说有18K&…

Linux学习——模拟实现mybash小程序

目录 一&#xff0c;跟正宗的bash见个面 二&#xff0c;实现一个山寨的bash 1.提示符 2.输入命令与回显命令 3.解析命令 4.执行命令 5.执行逻辑 三&#xff0c;全部代码 一&#xff0c;跟正宗的bash见个面 在这篇文章中&#xff0c;我会写一个myshell小程序。这个小程序…

logback-spring.xml详解

《springboot使用logback日志框架超详细教程》文中&#xff0c;filter中最重要的两个过滤器LevelFilter&#xff08;日志级别精确匹配&#xff09;、ThresholdFilter&#xff08;阈值过滤&#xff09; 的描述非常准确&#xff1a; springboot使用logback日志框架超详细教程_sp…

SQL Server数据库部署

数据库简介 使用数据库的必要性 使用数据库可以高效且条理分明地存储数据&#xff0c;使人们能够更加迅速、方便地管理数据。数据库 具有以下特点。 》可以结构化存储大量的数据信息&#xff0c;方便用户进行有效的检索和访问。 》 可以有效地保持数据信息的一致性&#xff0c…

【Casbin】一篇文章入门Casbin

Casbin Casbin模型基础&#xff08;PERM&#xff09;Policy定义Request定义MatchersEffect ACL模型RBAC模型Go语言实战使用前先下载casbin包新建一个Casbin enforcer判断是否能通过增加Policy删除Policy更新Policy获取Policy Casbin 权限管理在几乎每个系统中都是必备的模块。…

java设计模式学习之【桥接模式】

文章目录 引言桥接模式简介定义与用途&#xff1a;实现方式 使用场景优势与劣势桥接模式在Spring中的应用绘图示例代码地址 引言 想象你正在开发一个图形界面应用程序&#xff0c;需要支持多种不同的窗口操作系统。如果每个系统都需要写一套代码&#xff0c;那将是多么繁琐&am…

【vue-router】useRoute 和 useRouter 的区别

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall &#x1f343; vue3-element-admin &#x1f343; youlai-boot &#x1f33a; 仓库主页&#xff1a; Gitee &#x1f4ab; Github &#x1f4ab; GitCode &#x1f496; 欢迎点赞…

一起学docker系列之十四Dockerfile微服务实践

目录 1 前言2 创建微服务模块2.1 **创建项目模块**2.2 **编写业务代码** 3 编写 Dockerfile4 构建 Docker 镜像5 运行 Docker 容器6 测试微服务7 总结8 参考地址 1 前言 微服务架构已经成为现代软件开发中的一种重要方式。而 Docker 提供了一种轻量级、便携式的容器化解决方案…