C#代码实现矢量画图

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
简介: 原文:C#代码实现矢量画图 版权声明:本文为博主原创文章,转载请附上链接地址。 https://blog.csdn.net/ld15102891672/article/details/80275969 ...
原文: C#代码实现矢量画图

版权声明:本文为博主原创文章,转载请附上链接地址。 https://blog.csdn.net/ld15102891672/article/details/80275969

    要实现C#代码画矢量图,其基本原理是先创建一个容器作为画板,然后创建Line(直线)、PolyLine(多段线)、Rectangle(矩形)或者Ellipse(椭圆)基本绘图对象生成各种矢量图形,最后把这些图形对象添加到画板中即可,一般用Canvas容器作为画板。下面以在Canvas容器控件中绘制Line(直线)、PolyLine(多段线)、Rectangle(矩形)或者Ellipse(椭圆)等基本图形对矢量绘图进行简单的介绍,希望对大家有所帮助。

    创建一个C#项目,在项目中添加Canvas并把Canvas属性的旋转角度设置为-90度,然后添加绘制各种基本图形的按钮


      绘制坐标系效果图及代码


        private void PaintGrid()//画坐标系
		{
		    Line l=new Line();
			l.X1=0;
			l.Y1=10;
			l.X2=0;
			l.Y2=this.canvas.Height-10;
			l.StrokeThickness=1;
			l.Stroke=new SolidColorBrush(Color.FromRgb(0, 0, 0));
			Canvas.SetLeft(l,this.canvas.Width/2);
			this.canvas.Children.Add(l);
			l=new Line();
			l.X1=10;
			l.Y1=0;
			l.X2=this.canvas.Width-10;;
			l.Y2=0;
			l.StrokeThickness=1;
			l.Stroke=new SolidColorBrush(Color.FromRgb(0, 0, 0));
			Canvas.SetTop(l,this.canvas.Height/2);
			this.canvas.Children.Add(l);
			for(int i=-10;i<=10;i++)
			{
			  l=new Line();
			  Line ly=new Line();
			  l.X1=i*15;
			  l.X2=i*15;
			  ly.Y1=i*15;
			  ly.Y2=i*15;
			 if(i%2==0)
			  {
				l.Y1=-5;
				l.Y2=5;
				ly.X1=-5;
				ly.X2=5;
			   }
				else
			   {
			    l.Y1=-10;
				l.Y2=10;
				ly.X1=-10;
				ly.X2=10;
			    }
			  l.StrokeThickness=1;
			  l.Stroke=new SolidColorBrush(Color.FromRgb(0, 0, 0));
			  Canvas.SetLeft(l,this.canvas.Width/2);
			  Canvas.SetTop(l,this.canvas.Height/2);
			  ly.StrokeThickness=1;
			  ly.Stroke=new SolidColorBrush(Color.FromRgb(0, 0, 0));
			  Canvas.SetLeft(ly,this.canvas.Width/2);
			  Canvas.SetTop(ly,this.canvas.Height/2);
			  this.canvas.Children.Add(ly);
			  this.canvas.Children.Add(l);
			}
			 Label lb=new Label();
			  lb.Content="X";
			  RotateTransform rotateTransform = new RotateTransform(90);//90度
			  lb.RenderTransform=rotateTransform;
			  Canvas.SetRight(lb,5);
			  Canvas.SetTop(lb,canvas.Height/2-20);
			  this.canvas.Children.Add(lb);
			  lb=new Label();
			  lb.Content="Y";
			  lb.RenderTransform=rotateTransform;
			  Canvas.SetRight(lb,canvas.Width/2-15);
			  Canvas.SetBottom(lb,10);
			  this.canvas.Children.Add(lb);
			  Polyline pl=new Polyline();
			  pl.Points.Add(new Point(this.canvas.Width/2-20,-5));
			  pl.Points.Add(new Point(this.canvas.Width/2-10,0));
			  pl.Points.Add(new Point(this.canvas.Width/2-20,5));
			  pl.Stroke=new SolidColorBrush(Color.FromRgb(0,0,0));
			  pl.StrokeThickness=1;
			  Canvas.SetLeft(pl,this.canvas.Width/2);
			  Canvas.SetTop(pl,this.canvas.Height/2);
			   this.canvas.Children.Add(pl);
			  pl=new Polyline();
			  pl.Points.Add(new Point(-5,this.canvas.Height/2-20));
			  pl.Points.Add(new Point(0,this.canvas.Height/2-10));
			  pl.Points.Add(new Point(5,this.canvas.Height/2-20));
			  pl.Stroke=new SolidColorBrush(Color.FromRgb(0,0,0));
			  pl.StrokeThickness=1;
			  Canvas.SetLeft(pl,this.canvas.Width/2);
			  Canvas.SetTop(pl,this.canvas.Height/2);
			   this.canvas.Children.Add(pl);
		}

      绘制直线代码

private void bth_paint_Line(object sender, System.Windows.RoutedEventArgs e)//画直线
		{
			this.canvas.Children.Clear();//清空画板
			this.PaintGrid();//画坐标系
			Line l=new Line();//直线
			l.X1=0;
			l.Y1=0;
			l.X2=200;
			l.Y2=200;
			l.StrokeThickness=1;//直线宽度
			l.Stroke=new SolidColorBrush(Color.FromRgb(0, 0, 255));//直线颜色(蓝色)
			Canvas.SetLeft(l,this.canvas.Width/2);//X的原点平移到canvas容器中间
			Canvas.SetTop(l,this.canvas.Height/2);//Y的原点平移到canvas容器中间
			this.canvas.Children.Add(l);//在容器中添加该直线
		}

效果图


     画多段线代码

		private void bth_paint_Polyline(object sender, System.Windows.RoutedEventArgs e)//画多段线
		{
			this.canvas.Children.Clear();//清空画板
			this.PaintGrid();//画坐标系
			Polyline pl=new Polyline();
			pl.Points.Add(new Point(0,0));
			pl.Points.Add(new Point(50,50));
			pl.Points.Add(new Point(0,100));
			pl.Points.Add(new Point(50,150));
			pl.Stroke=new SolidColorBrush(Color.FromRgb(0,0,255));
			pl.StrokeThickness=1;
			Canvas.SetLeft(pl,this.canvas.Width/2);//X的原点平移到canvas容器中间
			Canvas.SetTop(pl,this.canvas.Height/2);//Y的原点平移到canvas容器中间
			this.canvas.Children.Add(pl);//在容器中添加该多段线
		}

效果图


画矩形代码

		private void bth_paint_Rectangle(object sender, System.Windows.RoutedEventArgs e)//画矩形
		{
			this.canvas.Children.Clear();//清空画板
			this.PaintGrid();//画坐标系
            Rectangle rect=new Rectangle();
			rect.Width=100;
			rect.Height=200;
			rect.Stroke=new SolidColorBrush(Color.FromRgb(0,0,255));
			rect.StrokeThickness=1;
			Canvas.SetLeft(rect,this.canvas.Width/2-rect.Width/2);
			Canvas.SetTop(rect,this.canvas.Height/2-rect.Height/2);
			this.canvas.Children.Add(rect);	
		}

效果图


画圆代码

	private void bth_paint_Circle(object sender, System.Windows.RoutedEventArgs e)//画圆
		{
			this.canvas.Children.Clear();//清空画板
			this.PaintGrid();//画坐标系
			Ellipse ep=new Ellipse();
			ep.Height=300;
			ep.Width=300;
			ep.Stroke=new SolidColorBrush(Color.FromRgb(0, 0, 255));
			ep.StrokeThickness=1;
			Canvas.SetLeft(ep,this.canvas.Width/2-ep.Width/2);
			Canvas.SetTop(ep,this.canvas.Height/2-ep.Height/2);
			this.canvas.Children.Add(ep);
		}

效果图


画椭圆代码

private void bth_paint_Ellipse(object sender, System.Windows.RoutedEventArgs e)//画椭圆
		{
			this.canvas.Children.Clear();//清空画板
			this.PaintGrid();//画坐标系
            Ellipse ep=new Ellipse();
			ep.Height=300;
			ep.Width=50;
			ep.Stroke=new SolidColorBrush(Color.FromRgb(0, 0, 255));
			ep.StrokeThickness=1;
			Canvas.SetLeft(ep,this.canvas.Width/2-ep.Width/2);
			Canvas.SetTop(ep,this.canvas.Height/2-ep.Height/2);
			this.canvas.Children.Add(ep);
		}

效果图


清空画板代码

private void btn_Clear(object sender, System.Windows.RoutedEventArgs e)
		{
			this.canvas.Children.Clear();//清空画板
			this.PaintGrid();//画坐标系
		}
本次矢量画图编程就介绍到这里,如果还有不明白的地方,可以加入扣扣群234035436进行技术交流,希望大家多多支持!


相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
5月前
|
C# Windows
C#通过代码实现快捷键编辑
C#通过代码实现快捷键编辑
|
5月前
|
开发框架 .NET 编译器
C# 10.0中Lambda表达式的改进:更简洁、更灵活的代码编写体验
【1月更文挑战第21天】随着C#语言的不断发展,Lambda表达式作为一种简洁、高效的函数式编程工具,在C# 10.0中迎来了重要的改进。本文将详细探讨C# 10.0中Lambda表达式的新特性,包括参数类型的推断增强、自然类型的Lambda参数以及Lambda表达式的属性改进等。这些改进不仅简化了Lambda表达式的编写过程,还提升了代码的可读性和灵活性,为开发者带来了更优质的编程体验。
|
5月前
|
C# 开发者
C# 10.0中的文件范围命名空间:简化代码组织的新方式
【1月更文挑战第18天】C# 10.0引入了文件范围的命名空间,这是一种新的语法糖,用于更简洁地组织和管理代码。文件范围命名空间允许开发者在每个文件的基础上定义命名空间,而无需显式使用花括号包裹整个文件内容。本文将深入探讨文件范围命名空间的工作原理、使用场景以及它们为C#开发者带来的便利。
|
2月前
|
C# 开发者 Windows
在VB.NET项目中使用C#编写的代码
在VB.NET项目中使用C#编写的代码
42 0
|
2月前
|
数据安全/隐私保护 C# UED
利用 Xamarin 开展企业级移动应用开发:从用户登录到客户管理,全面演示C#与Xamarin.Forms构建跨平台CRM应用的实战技巧与代码示例
【8月更文挑战第31天】利用 Xamarin 进行企业级移动应用开发能显著提升效率并确保高质量和高性能。Xamarin 的跨平台特性使得开发者可以通过单一的 C# 代码库构建 iOS、Android 和 Windows 应用,帮助企业快速推出产品并保持一致的用户体验。本文通过一个简单的 CRM 示例应用演示 Xamarin 的使用方法,并提供了具体的代码示例。该应用包括用户登录、客户列表显示和添加新客户等功能。此外,还介绍了如何增强应用的安全性、数据持久化、性能优化及可扩展性,从而构建出功能全面且体验良好的移动应用。
35 0
|
2月前
|
物联网 C# Windows
看看如何使用 C# 代码让 MQTT 进行完美通信
看看如何使用 C# 代码让 MQTT 进行完美通信
339 0
|
2月前
|
C#
C# 跳过值班时间代码逻辑
C# 跳过值班时间代码逻辑
27 0
|
3月前
|
文字识别 自然语言处理 C#
印刷文字识别使用问题之C#发票识别的代码实例在哪里可以查看
印刷文字识别产品,通常称为OCR(Optical Character Recognition)技术,是一种将图像中的印刷或手写文字转换为机器编码文本的过程。这项技术广泛应用于多个行业和场景中,显著提升文档处理、信息提取和数据录入的效率。以下是印刷文字识别产品的一些典型使用合集。
|
4月前
|
XML 开发框架 .NET
【.NET Core】常见C#代码约定
【.NET Core】常见C#代码约定
39 5
|
3月前
|
开发框架 数据可视化 C#