C#代码实现矢量画图

    要实现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进行技术交流,希望大家多多支持!


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

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

相关文章

matplotlib绘图并导出eps矢量图和svg矢量图

matplotlib导出矢量图并解决中文无法正常显示问题 做仿真经常需要输出各种矢量图用于论文插图&#xff0c;下面展示了导出eps矢量图和svg矢量图的方法&#xff1a; import numpy as np import matplotlib.pyplot as pltplt.rcParams[font.sans-serif] [SimHei] # 用来正常显…

知识库AI机器人客服(基于ChatGPT3.5)对接-唯一客服系统文档中心

此功能是利用chatgpt训练企业知识开发个性化客服系统&#xff0c;可以上传自有数据&#xff0c;基于向量数据库与OpenAI Embedding&#xff0c;以及OpenAI chat/completions接口&#xff0c;实现的基于自建知识库的ChatGPT AI客服功能 管理员创建集合 向量数据库集合&#xff0…

Lazada跨境卖家必备的精细化运营工具Ushop BI的智能化选品功能

东南亚跨境电商市场的不断发展壮大&#xff0c;使得东南亚市场成为了许多跨境商家的掘金圣地&#xff0c;而Lazada作为东南亚市场的两大跨境电商平台之一&#xff0c;其发展潜力是不容小觑的&#xff0c;许多商家入驻Lazada平台是希望可以在这里将店铺做大做好&#xff0c;那俗…

跨境电商选品重要吗?

选品很重要&#xff01; 跨境电子商务选择的核心要求&#xff1a;优质商品&#xff0c;价格优势&#xff0c;符合跨境销售特点&#xff0c;满足目标海外市场需求&#xff0c;突出自身特色竞争优势。 跨境电商是如何选择产品的&#xff1f; 这个问题也很流行&#xff0c;应该考虑…

注册kaggle帐号及kaggle绑定手机收不到验证码的问题

由于自己在这上面折腾了不少时间&#xff0c;故写下这篇博客&#xff0c;希望对大家有用。 一、注册kaggle帐号 点击进入kaggle网站 kaggle网站 1.点击sign in 2.如果有雅虎、google、facebook账户的话&#xff0c;是可以直接登录的。如果没有这些账户&#xff0c;就点击Reg…

解决新用户注册Kaggle无法显示验证码的问题

解决新用户注册Kaggle无法显示验证码的问题 老板近期要求做一个比赛&#xff0c;需要注册Kaggle账户&#xff0c;但是在注册界面会无法出现人机验证&#xff0c;在这里记录一下解决的过程&#xff1a; 1.注册无法验证 2.尝试插件解决 为了解决这个问题&#xff0c;我参考了很…

手机验证码接收注册新账户

在写注册的时候想使用手机号进行验证&#xff0c;用来保证用户的安全性操作&#xff0c;因为以前使用的是邮箱验证&#xff0c;太麻烦了。所以在网上找到了一个比较好的第三方提供短信送达服务&#xff0c;有的还需要企业用户认证&#xff0c;这里我选择的是网易云的短信服务。…

我看CHATGPT: 为啥谷歌掉了千亿美金

两个月前&#xff0c;我试着想用 ChatGPT 帮我写篇文章《eBPF 介绍》&#xff0c;结果错误百出&#xff0c;导致我又要从头改一遍&#xff0c;从那天我觉得 ChatGPT 生成的内容完全不靠谱&#xff0c;所以&#xff0c;从那天开始我说我不会再用 ChatGPT 来写文章&#xff08;这…

chat聊天程序

服务端: package cs;import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.io.*; import java.net.ServerSocket; import …

多家游戏交易平台发声,禁止未成年人买号租号

游戏租号绕开防沉迷系统事件迎来下文。9 月7 日&#xff0c;DD3737、交易猫、5173 等游戏交易平台相继发布声明&#xff0c;已采取严格措施禁止任何未成年人利用游戏交易平台买卖和租赁游戏账号。 同时&#xff0c;上述游戏交易平台还呼吁&#xff1a;游戏出版、发行、运营、交…

Vue3 TS setup 引入 markmap 思维导图,通过markdown解析成思维导图,集成到自己项目中

【前言】%&#xff08;&&#xff08;&……&#xff08;&#xff09;* 最近刚好做了个项目&#xff0c;给大家分享一个Vue3 TS setup 如何引入 markmap 思维导图,markmap可以通过markdown解析成思维导图。我们如何将它集成到自己项目中&#xff1f; 【看图】还是先看图…

一文学会:使用ChatGPT做XMind思维导图

先下载工具&#xff1a;XMind工具下载 假设我现在是一个小白&#xff0c;我想入行人工智能&#xff0c;我想让ChatGPT帮我生成一个学习路线&#xff0c;并做成思维导图的形式&#xff0c;那首先&#xff0c;我要告诉ChatGPT我想要的主题是什么 Prompt1:“我是一个大学生&#x…

ChatGPT4:智能化聊天工具,为你的生活带来更高效、便捷和多样化的聊天体验

随着时代的发展&#xff0c;人们的生活越来越快节奏化&#xff0c;工作压力越来越大。因此&#xff0c;他们需要一个智能化、高效率的聊天工具&#xff0c;来更好地完成工作和娱乐。恰巧&#xff0c;ChatGPT4是这样的一款聊天工具&#xff0c;它通过人工智能技术能够与用户进行…

AI_News周刊:第一期

2023.02.06—2023.02.12 关于ChatGPT的前言&#xff1a; 在去年年末&#xff0c;OpenAI的ChatGPT在技术圈已经火了一次&#xff0c;随着上周它的二次出圈&#xff0c;ChatGPT算得上是人工智能领域的一颗明星&#xff0c;它在聊天机器人领域有着不可忽视的影响力。其准确、快速…

九龙证券|突然哑火!最火爆中小盘明显回调,后市咋走?机构最新解读

中证1000和国证2000指数创年内新高后&#xff0c;连续2日回调。 2月17日A股商场震动下行&#xff0c;创业板指数跌幅超2%&#xff0c;近3000只个股跌落&#xff0c;北向资金小幅净流入&#xff0c;商场成交额接近万亿关口&#xff0c;港股也出现显着回调痕迹。 以中小市值公司…

java程序员应聘优秀简历

年 龄&#xff1a;22 姓 名&#xff1a;___ 性 别&#xff1a;男 联系电话&#xff1a;____ 联系邮箱&#xff1a;____ 现住址&#xff1a; 专 业&#xff1a;计算机网络与电子商务 择业目标 Java软件工程师 基于Oracle数据库&#xff0c;MySQL数据库&#xff0c;Web应用的Java…

理性和感性 - 如何对待错误

上次的博客&#xff0c; 我写了一些关于 软件开发中的理性和感性决定 的故事。 不论是感性还是理性&#xff0c;我们的目的就是要把软件交给用户去用&#xff0c; 在软件行业中有这样一句俗话&#xff1a; 当你把产品交给用户的时候&#xff0c;你的学习才刚刚开始。 当然每个团…

【考研】关于联系导师的经验分享--目标院校:西北工业大学

前面的前面 今天打开了我的csdn&#xff0c;突然发现2019年发过的一篇问答稿竟然帮助了那么多人&#xff0c;我平时都是在csdn上搜问题&#xff0c;也没有想过分享。所以就想以后要多在这里记录我的经验了&#xff0c;方便自己也帮助他人~ 这是一篇尘封已久的经验稿&#xff…

怎么才能优雅地向导师表达「这周科研没什么进展」?

本文来源&#xff1a;知乎 大家讨论下&#xff1a;怎么才能优雅地向导师表达「这周科研没什么进展」&#xff1f; 导师看你做实验时 当你开组会时&#xff0c;用力屏住呼吸&#xff0c;心虚地躲在角落里。 高赞回复一 作者&#xff1a;FF LIU 1.模型已经基本搭建好&#xff0c;…