快捷获取GDI+绘图参数的两种经验方案

news2024/12/24 11:45:45

文章目录

  • 一、使用系统的枚举
  • 二、专用枚举
    • 1、颜色Color
    • 2、字体Font
    • 3、字体名称
    • 4、笔刷Brush
    • 5、笔Pen
    • 6、矩形Rectangle
    • 7、点Point
    • 8、大小Size

文章出处: https://blog.csdn.net/haigear/article/details/129085403
在绘图中,常常需要给出颜色,字体,字体样式,笔刷,矩形,点等,每次如果都使用new来创建一个新的实在太费事实力,而且个人感觉没有太大的必要,尤其是在对这些要求不那么需要个性化的时候,或者测试的时候,所以我们就要知道如何快速的获取他们。

一、使用系统的枚举

第一个思路就是用“官家”的,他们也要绘图,所以他们自己肯定有一套现成的参数枚举。所以它们都是以系统开始的。
在这里插入图片描述
系统枚举往往只能提供系统需要的典型类型,标题,边框,控件背景等等,也就是说系统提供的这些专供系统界面使用的色彩样式几笔刷都相对比较单调。那么如何又获得比较丰富而且快捷的笔刷色彩和矩形大小点这些参数呢?可以用专用枚举。

二、专用枚举

1、颜色Color

color系统已经提供了专用的枚举,当我们需要特别有个性的颜色的时候,我们就通过new color 来构造定制。
利用Color枚举,直接调用典型颜色:

Color.Blue

还有一个比较意外的地方,其实是可以通过Pens的枚举来解决,通过画笔枚举的颜色属性获取颜色:

Pens.Blue.Color

比如我们的笔刷要用颜色参数了,我们可以这样来:

Brush  bsh=new SolidBrush(Pens.Pink.Color);

当然,我们的Bushes枚举里面本来就有自带的颜色,但brushes中的颜色是不可以取出来的,只有Pens枚举中的颜色可以通过color属性获取。

2、字体Font

快速获取字体。它没有专用的枚举,有两个个办法,第一就是前面说的系统字体。

SystemFonts.CaptionFont!

第二个办法就使用控件和窗体字体:

this.Font//窗体字体
this.button1.Font//控件字体
 gp.DrawString("hello", this.Font, Brushes.Black, new PointF(100,100));

3、字体名称

顺便补充一下,如何获取字体名称,我们大多数人是不记得字体名称的(可能你记得“宋体”和“Arial”)。使用FontFamily.Name

this.Font.FontFamily.Name
new Font(this.Font.FontFamily.Name,5)

4、笔刷Brush

笔刷的实例化说起来是最麻烦的,因为brush是抽象类,我们初始化的时候一般用SolidBrush来初始化,如:

 Brush brsh = new SolidBrush(Color.Blue);

那么,如何快速获得呢?其实Brush是以后专业有的枚举的,Brushes,比如我们要填充一个圆,直接:

 gp.FillEllipse(Brushes.Blue, new Rectangle(100,100,200,200));

这里,我们就直接使用Brushes枚举获得了笔刷,而且颜色也一并获得了。对于我们没有颜色定制要求的测试来说足够了。

5、笔Pen

pen的枚举专用枚举,直接

 Pens.Red;

我们可以这样用

 Graphics gp = e.Graphics;
gp.DrawEllipse(Pens.Red, new Rectangle(100,100,200,200));

6、矩形Rectangle

其实我们如果仅仅是需要一个矩形来作测试的话,那么我们获得矩形的方法快捷方法还是有的,比如:

this.ClientRectangle;
this.pictureBox1.ClientRectangle
Rectangle rect= this.ClientRectangle;
rect.Inflate(-100, -100);

上面我们通过了Inflate的方法对获取的矩形进行大小调节,但比较麻烦,需要两步来完成。
其实,Inflate还有一个静态方法很好用:

 dc.DrawRectangle(Pens.Red, Rectangle.Inflate(this.ClientRectangle,-100,-100));

总结下,有两点要注意的:
1、可以是任何控件的ClientRectangle,但需要注意的是,我们这样获取的矩形,都是和窗体及控件形状一样的,需要通过Rectangle的静态方法Inflate来调整一下大小最好。
2、这样获取的矩形的起始坐标默认的是在(0,0)点,需要通过Offset来设置一下位置。

7、点Point

关于这点,系统也没有它的特殊点的枚举,而且也貌似没有什么方法可以获取一个比较好的位置适合来测试,因为我们能获得的点貌似只有控件的location

this.pictureBox1.ClientRectangle.Location;

再配合矩形的offset方法移动到合适的位置,但这样是更麻烦,还不如直接自己new 一个新的点。
当然,这里其实有一个小小的技巧,我们完全可以利用控件的位置来绘图,方法就是把控件拖动到你想要的位置后隐藏起来,这样我们的绘图的起点就是控件的起点了。

8、大小Size

Size的获取也最好是从控件快速获取

Size sz=this.pictureBox1.Size;

用法小技巧和点相同,当我们的确要控制绘制图形的大小,那我们完全可以通过拖放控件的大小来控制。
码字不易,请注明出处:https://blog.csdn.net/haigear/article/details/129085403

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

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

相关文章

目标检测各常见评价指标详解

注:本文仅供学习,未经同意请勿转载 说明:该博客来源于xiaobai_Ry:2020年3月笔记 对应的PDF下载链接在:待上传 目录 常见的评价指标 准确率 (Accuracy) 混淆矩阵 (Confusion Matrix&#xff…

SpringBoot实现统一返回接口(除AOP)

起因 关于使用AOP去实现统一返回接口在之前的博客中我们已经实现了,但我突然突发奇想,SpringBoot中异常类的统一返回好像是通过RestControllerAdvice 这个注解去完成的,那我是否也可以通过这个注解去实现统一返回接口。 正文 这个方法主要…

Django框架之模型视图--HttpResponse对象

HttpResponse对象 视图在接收请求并处理后,必须返回HttpResponse对象或子对象。HttpRequest对象由Django创建,HttpResponse对象由开发人员创建。 1 HttpResponse 可以使用django.http.HttpResponse来构造响应对象。 HttpResponse(content响应体, con…

【opencv源码解析0.2】opencv库源码编译

如何编译opencv库源码 大家好,我是周旋,感谢大家学习【opencv源码解析】系列,本系列首发于公众号【周旋机器视觉】。 上篇文章我们介绍了如何配置opencv环境,搞清了opencv的包含目录include、静态库链接以及动态库链接的作用。 【…

(考研湖科大教书匠计算机网络)第五章传输层-第四节:TCP流量控制

获取pdf:密码7281专栏目录首页:【专栏必读】考研湖科大教书匠计算机网络笔记导航 文章目录一:流量控制概述二:流量控制举例三:拓展阅读(可不看)(1)TCP流量控制完整例子&a…

马上卸载这个恶心的软件!

大家好,我是良许。 春节已经过完了,但在这喜庆的日子里,又有一个小丑在上窜下跳了。 没错,这个不要脸的小丑依然还是 Notepad 的作者。 好好的一个开发者,为何老喜欢整一些有得没得的东西?好好搬砖写代码…

pygame8 扫雷游戏

一、游戏规则: 1、点击方格,如果是地雷,游戏失败,找到所有地雷游戏胜利 2、如果方块上出现数字,则表示在其周围的八个方块中共有多少颗地雷 二、游戏主逻辑: 主要逻辑即调用run_game, 然后循环检测事件…

云计算|OpenStack|社区版OpenStack---基本概念科普(kvm的驱动类别和安装)

前言: 云计算里基本都是基于kvm技术作为底层支撑,但,该技术是比较复杂的,首先,需要硬件的 支撑,表现在物理机上,就是需要在BIOS中调整设置虚拟化功能,这个虚拟机功能通常是interVT或…

Fastjson2基础使用以及底层序列化/反序列化实现探究

1 Fastjson2简介 Fastjson2是Fastjson的升级版,特征: 协议支持:支持JSON/JSONB两种协议部分解析:可以使用JSONPath进行部分解析获取需要的值语言支持:Java/Kotlin场景支持:Android8/服务端其他特性支持&a…

python基础知识有哪些需要背(记住是基础知识)我是初学者

大家好,小编来为大家解答以下问题,一个有趣的事情,一个有趣的事情,今天让我们一起来看看吧! 1、python基础知识有哪些需要背(记住是基础知识)我是初学者 或看好Python的广阔前景,或…

RabbitMQ 入门到应用 ( 五 ) 应用

6.更多应用 6.1.AmqpAdmin 工具类 可以通过Spring的Autowired 注入 AmqpAdmin 工具类 , 通过这个工具类创建 队列, 交换机及绑定 import org.springframework.amqp.core.AmqpAdmin; import org.springframework.amqp.core.Binding; import org.springframework.amqp.core.Di…

python基于django微信小程序的适老化老人健康预警小程序

随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,各行各业相继进入信息管理时代, 适老化老人健康预警微信小程序就是信息时代变革中的产物之一。 任何系统都要遵…

Spring国际化实现

Java国际化 Java使用Unicode来处理所有字符。 Locales 国际化主要涉及的是数字、日期、金额等。 有若干个专门负责格式处理的类。为了对格式进行控制,可以使用Locale类。它描述了: 一种语言一个位置(通常包含)一段脚本(可选,自Java SE7开…

CMMI之需求开发流程

需求开发(Requirement Development, RD)的目的是通过调查与分析,获取用户需求并定义产品需求。需求开发过程域是SPP模型的重要组成部分。本规范阐述了需求开发过程域的两个主要规程: 需求调查 [SPP-PROC-RM-SURVEY] 需求定义 [SPP…

消失的数字【C语言】

题目&#xff1a; 数组nums包含从0到n的所有整数&#xff0c;但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗&#xff1f; 解法&#xff1a; int missingNumber(int* nums, int numsSize){int val0;for(int i0;i<numsSize;i){val^nums[i];}fo…

Vue3之条件渲染

1.何为条件渲染 条件渲染就是在指定的条件下&#xff0c;渲染出指定的UI。比如当我们显示主页的时候&#xff0c;应该隐藏掉登录等一系列不相干的UI元素。即UI元素只在特定条件下进行显示。而在VUE3中&#xff0c;这种UI元素的显示和隐藏可以通过两个关键字&#xff0c;v-if 和…

Qt动画框架详解

目录1.前言2.原理3.属性动画4.并行执行的动画5.顺序执行的动画6.扩展属性动画支持的数据类型1.前言 为软件适当的添加一些动画&#xff0c;能够提高软件的用户体验。在使用Qt框架开发软件时&#xff0c;我们可以用Qt提供的动画框架来为QWidget等UI元素添加动画效果。本文从动画…

程序员和他的女朋友一起创建了价值 150,000,000 美元的网站

本篇文章讲述了Otis和Elizabeth Chandler创办Goodreads.com的故事。他们从小就爱读书&#xff0c;创办网站前他们的困惑是没有很多人在线分享书评。Otis和Elizabeth觉得如果有一个地方把所有人的评论和评价收集起来&#xff0c;那将会很有价值。奥蒂斯和伊丽莎白从小就喜欢读书…

MMKV与mmap:全方位解析

概述 MMKV 是基于 mmap 内存映射的移动端通用 key-value 组件&#xff0c;底层序列化/反序列化使用 protobuf 实现&#xff0c;性能高&#xff0c;稳定性强。从 2015 年中至今&#xff0c;在 iOS 微信上使用已有近 3 年&#xff0c;其性能和稳定性经过了时间的验证。近期已移植…

海量数据相似数据查询方法

1、海量文本常见 海量文本场景&#xff0c;如何寻找一个doc的topn相似doc&#xff0c;一般存在2个问题&#xff0c; 1)、两两对比时间o(n^2) 2)、高维向量比较比较耗时。 文本集可以看成(doc,word)稀疏矩阵&#xff0c;一般常见的方法是构建到排索引&#xff0c;然后进行归并…