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

news2025/1/6 18:47:59

目录

一、直线

二、矩形

三、椭圆

四、圆

五、圆弧

六、扇形

七、多边形

八、示例源码


一、直线

        调用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.coloradmin.cn/o/1277269.html

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

相关文章

Spring---更简单的存储和读取对象

文章目录 存储Bean对象配置扫描路径添加注解存储Bean对象使用类注解为什么需要五个类注解呢&#xff1f;Bean命名规则 使用方法注解重命名Bean 读取Bean对象属性注入Setter注入构造方法注入注入多个相同类型的BeanAutowired vs Resource 存储Bean对象 配置扫描路径 注&#xf…

计算机网络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…

python自动化第二篇——合并ppt

简述 python合并ppt的方法有很多&#xff0c;但网上常说的python-pptx的方法&#xff0c;我用不了&#xff0c;这里我用了一个python-office的库。但又两个缺点&#xff0c;第一个生成的文档在你的用户名下的文档里&#xff0c;第二个是名字随机。 import office import os im…

2023_Spark_实验二十四:SparkStreaming读取Kafka数据源:使用Direct方式

SparkStreaming读取Kafka数据源&#xff1a;使用Direct方式 一、前提工作 安装了zookeeper 安装了Kafka 实验环境&#xff1a;kafka zookeeper spark 实验流程 二、实验内容 实验要求&#xff1a;实现的从kafka读取实现wordcount程序 启动zookeeper zk.sh start# zk.sh…

西南科技大学模拟电子技术实验三(BJT单管共射放大电路测试)预习报告

一、计算/设计过程 说明:本实验是验证性实验,计算预测验证结果。是设计性实验一定要从系统指标计算出元件参数过程,越详细越好。用公式输入法完成相关公式内容,不得贴手写图片。(注意:从抽象公式直接得出结果,不得分,页数可根据内容调整) 二、画出并填写实验指导书上…

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

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

使用drawio图表,在团队中,做计划,设计和跟踪项目

使用drawio图表&#xff0c;在团队中&#xff0c;做计划&#xff0c;设计和跟踪项目 drawio是一款强大的图表绘制软件&#xff0c;支持在线云端版本以及windows, macOS, linux安装版。 如果想在线直接使用&#xff0c;则直接输入网址draw.io或者使用drawon(桌案), drawon.cn内部…

六、三台主机免密登录和时钟同步

目录 1、免密登录 1.1 为什么要免密登录 1.2 免密 SSH 登录的原理

Sass 同时导出JavaScript 和 CSS变量

Sass 官网 安装插件 注意 sass-loader 版本没设太高&#xff0c;否则会报错 Syntax Error: TypeError: this.getOptions is not a function npm i sass sass-loader10 -D创建 Sass 文件 variables.module.scss。注意这里是 module.scss&#xff1a; 否则报错 Cant find st…

安卓小程序与编译抓包

APK小程序渗透测试 查找bp的证书 在浏览器中打开bp代理&#xff0c;然后在网页中搜索hppps://burp 点击高级——接受风险并继续 拿到证书 将浏览器信任证书 打开设置 搜索证书——查看证书 点击导入——导入证书 证书验证成功后&#xff0c;访问网页&#xff08;吾爱破解&a…

linux上编写进度条

目录 一、预备的两个小知识1、缓冲区2、回车与换行 二、倒计时程序三、编写入门的进度条四、编写一个正式的五、模拟实现和下载速度相关的进度条 一、预备的两个小知识 1、缓冲区 首先认识一下缓冲区&#xff1a;先写一个.c文件如下&#xff1a; 我们执行一下这个程序时&…

windows ce Remote Process Explorer定位程序崩溃地址

windows ce Remote Process Explorer定位程序崩溃地址 一&#xff1a;下载地址二&#xff1a;使用1&#xff09;找到程序基准地址2) 定位程序异常位置 一&#xff1a;下载地址 链接&#xff1a;https://pan.baidu.com/s/1fQVBpputtRmynqa95DaPrg 提取码&#xff1a;cx65 二&a…

hdlbits系列verilog解答(真值表)-50

文章目录 一、问题描述二、verilog源码三、仿真结果一、问题描述 本节我们学习用真值表来描述组合逻辑的行为,通过真值表我们将组合逻辑的每一种输入和输出对应值都罗列出来。 对于一个N个输入的布尔函数,理论上有2的N次方输入组合。下表是一个3输入的例子。 假设现在我们来…

Vue---Echarts

项目需要用echarts来做数据展示&#xff0c;现记录vue3引入并使用echarts的过程。 1. 使用步骤 安装 ECharts&#xff1a;使用 npm 或 yarn 等包管理工具安装 ECharts。 npm install echarts 在 Vue 组件中引入 ECharts&#xff1a;在需要使用图表的 Vue 组件中&#xff0c;引入…

探索数据之美:深入学习Plotly库的强大可视化

1. 引言&#xff1a; Plotly 是一个交互性可视化库&#xff0c;可以用于创建各种漂亮的图表和仪表板。它支持多种编程语言&#xff0c;包括Python、R、JavaScript。在Python中&#xff0c;Plotly提供了Plotly Express和Graph Objects两个主要的绘图接口。 2. Plotly库简介&am…

第九节HarmonyOS 常用基础组件1-Text

一、组件介绍 组件&#xff08;Component&#xff09;是界面搭建与显示的最小单位&#xff0c;HarmonyOS ArkUI声名式为开发者提供了丰富多样的UI组件&#xff0c;我们可以使用这些组件轻松的编写出更加丰富、漂亮的界面。 组件根据功能可以分为以下五大类&#xff1a;基础组件…

优化生产流程,开启智能制造新时代——探索MES生产管理系统的优势

在当今高度竞争且日益全球化的制造业环境中&#xff0c;企业需要不断提升生产效率&#xff0c;同时也要降低成本。作为一种先进的生产管理工具&#xff0c;MES生产管理系统正在全球范围内受到制造业的广泛关注。本文将深入探讨MES生产管理系统的优势以及如何帮助企业实现这些目…

00后卷王真的很卷吗?

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

时序预测 | Python实现TCN时间卷积神经网络时间序列预测(多图,多指标)

时序预测 | Python实现TCN时间卷积神经网络时间序列预测(多图,多指标) 目录 时序预测 | Python实现TCN时间卷积神经网络时间序列预测(多图,多指标)预测效果基本介绍环境准备程序设计参考资料预测效果 基本介绍

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

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