当前位置: 首页 > news >正文

C#中GDI+的矩形功能扩展

文章目录

    • 一、中心定位绘制图形
      • 1、矩形及椭圆中心定位
      • 2、圆的中心定位矩形
    • 二、圆角矩形
    • 三、收缩功能
    • 四、移动复制功能

原文出处: https://haigear.blog.csdn.net/article/details/129060020
GDI发展到GDI+绘制函数中的参数往往都有矩形这个参数(除绘制直线和路径),所以我们用好了矩形绘图就容易多了。

一、中心定位绘制图形

但当我们绘制一个图形时都需要定位,而按照我们的定位习惯或者可预见的能力,一般都还是喜欢中心定位,恰恰gdi+不提供。
所以,这里我特意扩展了两个函数,我想一定可以给大家带来便利:

1、矩形及椭圆中心定位

 /// <summary>/// 为画矩形和椭圆提供rectangle中心/// </summary>/// <param name="centerPoint"></param>/// <param name="width"></param>/// <param name="hight"></param>/// <returns></returns>Rectangle getRectByCenter(Point centerPoint,int width,int hight) {return new Rectangle(centerPoint.X - width/2, centerPoint.Y - hight/2, width, hight);}

2、圆的中心定位矩形

 /// <summary>
/// 为画圆或者圆弧提供rect中心
/// </summary>
/// <param name="centerPoint"></param>
/// <param name="radius"></param>
/// <returns></returns>
Rectangle getRectByCenter(Point centerPoint, int radius){//圆半径在水平是的X坐标和垂直时的Y坐标刚好是矩形的起始坐标,半径的两倍刚好是正方形的边长return new Rectangle(centerPoint.X - radius, centerPoint.Y - radius, 2 * radius, 2 * radius);}

有了中心定位,我们只要给定一个中心,那么绘制图形就随心所欲啦,比如我们在屏幕的中心绘制一个圆:

  g.DrawEllipse(new Pen(Color.Red, 3), getRectByCenter(new Point(this.Width / 2, this.Height / 2),  100));

在这里插入图片描述

如果,我们想绘制一个圆球体,那就纵横都绘制一些椭圆即可,如下图:
在这里插入图片描述

二、圆角矩形

下面的方法其实是将一个矩形转化为了一个Path,里面添加了几个Arc

 void drawRoundRectangle(Graphics gp,Rectangle rectangle,int radius)
{GraphicsPath graphicsPath = new GraphicsPath();             for(int i = 0; i < 4; i++){var x=  (i>0 && i<3)?rectangle.X+rectangle.Width-radius: rectangle.X ;var y = (i>1)?rectangle.Y +(rectangle.Height-radius): rectangle.Y ;graphicsPath.AddArc(new Rectangle(x,y,radius,radius),180+i*90,90);}graphicsPath.CloseFigure();gp.DrawPath(new Pen(Color.Red, 4),graphicsPath);}

但这样以后我们绘制圆角矩形就容易多了

drawRoundRectangle(g, getRectByCenter(new Point(this.Width / 2, this.Height / 2), 100,200),40);

在这里插入图片描述
再配合我们后面的移动复制函数,很随意就画出一排圆角矩形,适合做界面
在这里插入图片描述

drawRoundRectangle(g, centerRect,40);
drawRoundRectangle(g, copyRectWithGap(centerRect, 20), 40);
drawRoundRectangle(g, copyRectWithGap(centerRect, -20), 40);

三、收缩功能

官方有自带的inflate功能,但它不能返回一个矩形,所以代码需要两步才能完成,和offSet用法一样,我这里主要想一步完成。所以有了这个代码。

  Rectangle shrinkRectangle(ref Rectangle rectangle,int offset){rectangle.Offset(offset,offset);rectangle.Width = rectangle.Width-2*offset;rectangle.Height= rectangle.Height-2*offset;return rectangle;}

我们将上面的图形收缩一下,就很容易了:
在这里插入图片描述

 Rectangle rect1 = new Rectangle(50, 50, 200, 200);g.DrawRectangle(new Pen(Color.Yellow, 2), rect1);shrinkRectangle(ref rect1, 20);drawRoundRectangle(g, rect1, 20);

这里调用了前面的drawRoundRectangle绘制圆角矩形函数。

四、移动复制功能

这个系统自带了,但我们还是想给它扩展出一个相对另一个矩形的移动功能,也就是所,我们一只一个矩形,在这个矩形的基础上再移动一定的距离

Rectangle copyRectWithGap(Rectangle rect, int gapx=0,int gapy=0){Rectangle rt = rect;          rt.Offset(gapx+rect.Width,gapy+rect.Height);return rt;}

暂时扩展了这四种功能,后面有时间再多扩展一些便于我们使用的函数,弥补、gdi+的绘制功能灵活度的不足。
码字不易,请标明出处:https://haigear.blog.csdn.net/article/details/129060020

相关文章:

C#中GDI+的矩形功能扩展

文章目录一、中心定位绘制图形1、矩形及椭圆中心定位2、圆的中心定位矩形二、圆角矩形三、收缩功能四、移动复制功能原文出处&#xff1a; https://haigear.blog.csdn.net/article/details/129060020GDI发展到GDI绘制函数中的参数往往都有矩形这个参数&#xff08;除绘制直线和…...

数字经济活动题

讨论活动1-1&#xff1a;数字化 经济数字化&#xff08;数据数字化&#xff0c;高速通信&#xff0c;大容量存储&#xff09;将如何影响您所居住的国家&#xff1f;在网上搜索新闻文章&#xff08;两三篇就够了&#xff09;&#xff0c;并讨论数字化如何影响经济、公共部…...

html 的相对路径和绝对路径

整篇文章是以 src 标签进行演示。 文章目录 一、相对路径 1、同级目录查找 2、上一级目录查找 3、下一级目录查找 二、绝对路径 一、相对路径 &#x1f475;相对路径&#xff1a;从当前目录开始查找。 1、同级目录查找 写法&#xff1a; 1.1.直接写文件名字&#xff1b;…...

selenium进行QQ空间登录

一、selenium简要说明 selenium是基于浏览器自动化的一个模块&#xff0c;它能便捷的获取网站中动态加载的数据&#xff0c;和实现模拟登录、爬虫等操作 二、实现流程 2.1 selenium前置操作 1. 安装selenium模块 pip3 install selenium 2. 下载浏览器内核程序 注意&#xff1…...

SpringCloud(二)负载均衡服务调用Ribbon、服务接口调用OpenFeign案例详解

五、负载均衡服务调用Ribbon 技术版本Spring Cloud版本Hoxton.SR1Spring Boot版本2.2.2RELEASECloud Alibaba版本2.1.0.RELEASE Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具。 简单的说&#xff0c;Ribbon是Netflix发布的开源项目&#xff0c;主…...

大数据第一轮复习笔记(2)

Spark ./spark-submit --class com.kgc.myspark01.WordCount --master yarn --deploy-mode cluster /opt/myspark01-1.0-SNAPSHOT.jar 1.Client向YARN的ResourceManager申请启动Application Master。Client中创建SparkContext同时初始化中将创建DAGScheduler和TASKScheduler…...

3|射频识别技术|期末考试知识点|第3讲_RFID射频前端|重点题目

...

LeetCode 2108. 找出数组中的第一个回文字符串

给你一个字符串数组 words &#xff0c;找出并返回数组中的 第一个回文字符串 。如果不存在满足要求的字符串&#xff0c;返回一个 空字符串 “” 。 回文字符串 的定义为&#xff1a;如果一个字符串正着读和反着读一样&#xff0c;那么该字符串就是一个 回文字符串 。 示例 …...

第63章 SQL 快速参考教程

第63章 SQL 快速参考教程 SQL 语句语法AND / ORSELECT column_name(s) FROM table_name WHERE condition AND|OR conditionALTER TABLEALTER TABLE table_name ADD column_name datatypeor ALTER TABLE table_name DROP COLUMN column_name AS (alias)SELECT column_name AS …...

机器学习笔记

一 1.类型 有监督&#xff1a;分类、回归 无监督&#xff1a;聚类、降维 2.挑战&#xff1a; 过拟合&#xff1a;泛化能力弱 欠拟合&#xff1a;模型过于简单 二、 1.开发流程 数据收集->数据清洗->特征工程->数据建模 2.选择性能指标&#xff1a; 回归问题 均方根…...

L1-072 刮刮彩票

“刮刮彩票”是一款网络游戏里面的一个小游戏。如图所示&#xff1a; 每次游戏玩家会拿到一张彩票&#xff0c;上面会有 9 个数字&#xff0c;分别为数字 1 到数字 9&#xff0c;数字各不重复&#xff0c;并以 33 的“九宫格”形式排布在彩票上。 在游戏开始时能看见一个位置上…...

互联网摸鱼日报(2023-02-18)

互联网摸鱼日报&#xff08;2023-02-18&#xff09; InfoQ 热门话题 从用云焦虑到“深度云化”&#xff0c;新云原生时代带给我们哪些思考&#xff1f; 数据治理之需求层次 GitHub 更新 Copilot 以阻止不安全代码&#xff0c;并称其支持了超 60% 的 Java 开发者 数据库隔离…...

Spring 中经典的 9 种设计模式

1.简单工厂(非23种设计模式中的一种) 2.工厂方法 3.单例模式 4.适配器模式 5.装饰器模式 6.代理模式 7.观察者模式 8.策略模式 9.模版方法模式 Spring中涉及的设计模式总结 1.简单工厂(非23种设计模式中的一种) 实现方式&#xff1a; BeanFactory。Spring中的BeanFa…...

CentOS7突然没法上网【Network 中wired 图标消失】

参考文章(七种办法)&#xff1a;CentOS 7 右上角网络连接图标消失,设置网络有线消失解决办法 正常图标消失&#xff0c;先在 终端命令 依次执行以下命令 service NetworkManager stop service network restart service NetworkManager start 一、问题真烦 CentOS7图形化界面安装…...

SpringBoot3集成TDengine自适应裂变存储

前言 首先很遗憾的告诉大家&#xff0c;今天这篇分享要关注才可以看了。原因是穷啊&#xff0c;现在基本都是要人民币玩家了&#xff0c;就比如chatGPT、copilot&#xff0c;这些AI虽然都是可以很好的辅助编码&#xff0c;但是都是要钱。入驻CSDN有些年头了&#xff0c;中间有几…...

golang alpine 配置gstreamer开发环境

启动容器 sudo docker run -it --name golang -v $PWD:/home/leon -d golang:1.18-alpine3.17tar zxvf x86_64-linux-musl-cross.tgz mv x86_64-linux-musl-cross /usr/local/musl export PATH$PATH:/usr/local/musl/bin/:/usr/local/musl/x86_64-linux-musl/bin 下载gstre…...

SAP ABAP GUI_DOWNLOAD中下载乱码的问题

1 GUI_DOWNLOAD 1.1 问题表现 GUI_DOWNLOAD在应用当中有时会导致输出的文件在某些电脑正常显示&#xff0c;在某些电脑乱码显示。这个固然是由于各个电脑系统配置有差异&#xff0c;但是我们可以在应用该函数时就排除该差异来保证任意台电脑正常显示输出的文件。 如下…...

接口和抽象类

接口(Interface)和抽象类(Abstract Class)是支持抽象类定义的两种机制。 1.抽象类 (1)说明 在Java中被abstract关键字修饰的类称为抽象类&#xff0c;被abstract关键字修饰的方法称为抽象方法&#xff0c;抽象方法只有方法的声明&#xff0c;没有方法体。抽象类是用来捕捉子…...

ES7新特性

1. ES7 新特性 1.1. Array.prototype.includes includes 方法用来检测是否包含某个数组&#xff0c;返回布尔类型值 其他检测包含字符串的方法&#xff1a; indexOf&#xff08;&#xff09;&#xff0c;返回的是下标值&#xff0c;如果没有则返回-1 1.2 指数操作符 指数…...

【软件测试】资深测试总结的几个自动化测试点,提升跨越一大步......

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 自动化的软件测试与…...

GEE:时间序列分析1——认识arraySlice()

本文是记录时间序列分析系列教程的开篇之作,教程由浅入深介绍在GEE平台上进行时间序列分析的方法和代码。本教程会从操作时间序列的基本函数开始讲解,到后续更新会加入一些成熟的时间序列分析方法。随着本教程文章数量增加到一定数量,本专栏会适当涨价。欢迎乐多们订阅。 文…...

【react实战小项目:笔记】用React 16写了个订单页面

视频地址 React 16 实现订单列表及评价功能 简介&#xff1a;React 以其组件化的思想在前端领域大放异彩&#xff0c;但其革命化的前端开发理念对很多 React 初学者来说&#xff0c; 却很难真正理解和应用到真实项目中。本课程面向掌握了 React 基础知识但缺乏实战经验的开发…...

30岁+的人如何进行自我提升和职场规划

今天非常忙一天开了N个会&#xff0c;一堆头疼的事情要解决&#xff0c;一晃就加班到现在&#xff0c;刚打到了的士开始想今天分享点什么。 实在不知道写什么了&#xff0c;突然想起下午部门茶话会小伙伴问的问题&#xff1a;“30岁的人如何进行自我提升和职场规划”。 这是个…...

创建基于Vue2.0开发项目的两种方式

前天开始接触基于Vue2.0的前端项目&#xff0c;实际操作中肯定会遇到一些问题&#xff0c;慢慢摸索和总结。   其实&#xff0c;作为开发一般企事业单位应用的小项目&#xff0c;前端的懂一点HTMLCSSJavaScroptJQueryJson&#xff08;或者Xml&#xff09;&#xff0c;后端懂一…...

[测试]性能测试

最近遇到一个性能测试的问题&#xff0c;虽然最后确定是一个乌龙问题。这里还是总结一下&#xff0c;看是否有可以从中学到什么。 场景&#xff1a; 月底要出一个新版本。测试人员发现这个新版本在相同的负载的情况下&#xff0c;会有队列使用负荷过高的警告。之前的版本没有。…...

剑指 Offer 21. 调整数组顺序使奇数位于偶数前面

摘要 剑指 Offer 21. 调整数组顺序使奇数位于偶数前面 一、双指针解析 考虑定义双指针 i , j分列数组左右两端&#xff0c;循环执行&#xff1a; 指针 i从左向右寻找偶数&#xff1b;指针 j从右向左寻找奇数&#xff1b;将偶数nums[i]和奇数 nums[j]交换。 可始终保证&…...

实用版ChatBing论文阅读助手教程+新测评

实用版ChatBing论文阅读助手新测评 AI进化&#xff08;更新&#xff09;的速度太快了&#xff01;距离我上次的【Chat嘴硬&#xff01;基于NewBing的论文调研评测报告】&#xff0c;才四天&#xff0c;它已经进化到快能用的地步了&#xff01; 这次是我刷B站看到热门推荐&…...

Linux生产者消费模型

1.生产者消费者模型 1.1 为何要使用生产者消费者模型 生产者消费者模式就是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此之间不直接通讯&#xff0c;而通过阻塞队列来进行通讯&#xff0c;所以生产者生产完数据之后不用等待消费者处理&#xff0c;直接…...

动态网站开发讲课笔记01:网页开发基础

文章目录零、本讲学习目标一、HTML基础&#xff08;一&#xff09;HTML简介1、HTML2、HTML语言的基本格式3、<!DOCTYPE>声明4、html标签5、head标签6、body标签7、编写第一个网页8、关于编写HTML文件的工具9、HTML标签概述&#xff08;1&#xff09;单标签&#xff08;2&…...

互联网新时代要到来了(三)什么是ChatGPT?

什么是ChatGPT? tips&#xff1a;资料来自百度百科、openAi、CSDN博主「琦在江湖飘」、Info写作社区、CSDN博主「夕小瑶」等网页资料。 1.什么是ChatGPT&#xff1f; ChatGPT&#xff08;全名&#xff1a;Chat Generative Pre-trained Transformer&#xff09;&#xff0c;…...

java开发网站的优势/百度人气榜排名

如何去掉默认注释?* window -- Preferences -- Java -- Code Style -- Code Templates* 选择你不想要的内容&#xff0c;通过右边Edit编辑。* 注意&#xff1a;请只删除注释部分&#xff0c;不是注释部分的不要删除。 行号的显示和隐藏* 显示&#xff1a;在代码区域的最左边的…...

什么企业做网站/国家卫健委最新疫情报告

Python中plot() 淘宝历史价格&#xff0c;js chrome 插件 文档&#xff1a;Python中plot() 淘宝历史价格&#xff0c;js chro… 链接&#xff1a;http://note.youdao.com/noteshare?id2f626c689f0b2f8bbad7b464155d9078&sub6FC95351EB414B97847B03904FADBB10 添加链接描述…...

中港海通网站是谁做的/企业培训课程有哪些

第十六章 继承 16.1 继承的概念&#xff1a; 面向对象程序设计可以让你声明一个新类作为另一个类的派生。派生类(又称子类)继承父亲的属性和操作。子类也声明了新的属性和新的操作&#xff0c;剔除了那些不适合于其用途的继承下来的操作。即&#xff0c;继承可以让你重用父类的…...

郑州北环网站建设培训/重庆seo的薪酬水平

此文转载自&#xff1a;https://blog.csdn.net/m0_51344983/article/details/113467944#commentBox持续更新中… 7-2 小宝的幸运数组对于小宝来说&#xff0c;如果一个数组的总和能够整除他的幸运数字k&#xff0c;就是他的幸运数组&#xff0c;而其他数组小宝都很讨厌。现在有…...

做个网站上百度怎么做/相亲网站排名前十名

代码 在Delphi 开发中&#xff0c;常常应用到窗体消息传递&#xff0c;以达成某种操作要求&#xff0c;以下列举一个应用的例子&#xff0c;供大家参考。 自定义过程/函数方法&#xff1a;//发送字符串到指字句柄的窗口中 (接收窗体需用发送时的消息常量WM_COPYDATA)procedureS…...

天河做网站系统/营销型网站建设报价

本人屌丝本一枚,从最早的9.10京东到现在,找工作基本已经结束,除了腾讯的是暑期内推的(8.26面试的),校招期间一共面了四家,其中三家已经收到offer(京东阿里去哪儿),网易还在等通知中。如题,本人只是一个水得不能再水的本科生,大学四年,挂科5-6门的样子(这学期还要重修三门,妈蛋,…...