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

C#中的各种画刷, PathGradientBrush、线性渐变(LinearGradientBrush)和径向渐变的区别

在C#中,画刷(Brush)是用来填充图形(如形状或文本)内部区域的对象。在.NET框架中,画刷是System.Drawing命名空间的一部分,通常用于GDI+绘图操作。以下是一些常用的画刷类型:

  1. SolidBrush:用于创建单色填充的画刷。
  2. HatchBrush:用于创建具有图案填充的画刷。
  3. TextureBrush:用于创建具有图像纹理填充的画刷。
  4. LinearGradientBrush:用于创建线性渐变填充的画刷。
  5. PathGradientBrush:用于创建路径(或形状)渐变填充的画刷。

以下是如何在C#中使用SolidBrush的一个简单示例:

using System.Drawing;public void DrawRectangleWithBrush(Graphics g)
{// 创建一个SolidBrush对象,颜色为蓝色SolidBrush blueBrush = new SolidBrush(Color.Blue);// 使用画刷填充矩形g.FillRectangle(blueBrush, 0, 0, 100, 100);// 释放画刷资源blueBrush.Dispose();
}

在这个例子中,我们创建了一个蓝色的SolidBrush对象,并使用它来填充一个矩形。记得在不再需要画刷时调用Dispose方法来释放资源。

如果你需要使用其他类型的画刷,可以创建相应类型的画刷对象,并使用它们来填充图形。

例如,创建一个线性渐变画刷:

using System.Drawing;
using System.Drawing.Drawing2D;public void DrawRectangleWithLinearGradientBrush(Graphics g)
{// 创建一个线性渐变画刷LinearGradientBrush gradientBrush = new LinearGradientBrush(new Point(0, 0), // 渐变开始的坐标new Point(100, 100), // 渐变结束的坐标Color.Blue, // 渐变开始的颜色Color.White // 渐变结束的颜色);// 使用画刷填充矩形g.FillRectangle(gradientBrush, 0, 0, 100, 100);// 释放画刷资源gradientBrush.Dispose();
}

在这个例子中,我们创建了一个从蓝色到白色的线性渐变画刷,并使用它来填充一个矩形。

PathGradientBrush类

PathGradientBrush 是 .NET Framework 中 System.Drawing.Drawing2D 命名空间下的一个类,它用于创建一个可以填充路径或形状的渐变画刷。这种画刷可以用于创建复杂的渐变效果,比如可以围绕一个形状的轮廓进行渐变,而不是简单的线性或径向渐变。

以下是如何创建和使用 PathGradientBrush 的一个示例:

using System;
using System.Drawing;
using System.Drawing.Drawing2D;public class PathGradientExample
{public void Draw(Graphics g){// 创建一个图形路径GraphicsPath path = new GraphicsPath();path.AddEllipse(0, 0, 100, 100); // 添加一个椭圆路径// 创建一个PathGradientBrush,使用图形路径PathGradientBrush pthGrBrush = new PathGradientBrush(path);// 设置渐变的中心颜色和外围颜色pthGrBrush.CenterColor = Color.Blue;pthGrBrush.SurroundColors = new Color[] { Color.White };// 使用画刷填充路径g.FillPath(pthGrBrush, path);// 释放资源pthGrBrush.Dispose();path.Dispose();}
}

PathGradientBrush 还提供了一些属性来控制渐变的外观如:

  • CenterColor:设置渐变的中心颜色。
  • SurroundColors:设置渐变的外围颜色,可以是一个颜色数组。
  • FocusScales:设置渐变的焦点缩放,可以用来调整渐变的形状。
  • Rectangle:获取或设置定义渐变的矩形区域。
 PathGradientBrush、线性渐变(LinearGradientBrush)和径向渐变的区别
  1. 线性渐变(LinearGradientBrush

    • 线性渐变是沿着一条直线(渐变线)从一个颜色平滑过渡到另一个颜色。
    • 渐变的方向可以是水平、垂直或对角线,也可以自定义渐变线的角度。
    • 线性渐变通常用于创建简单的背景或渐变效果,比如从左到右的颜色变化。
  2. 径向渐变(PathGradientBrush 实现)

    • 径向渐变是从一个中心点向外辐射,颜色从中心向外逐渐变化。
    • 这种渐变效果类似于从中心向外扩散的波纹,常用于创建圆形或球形的视觉效果。
    • 使用 PathGradientBrush 时,可以通过设置 FocusScales 属性来控制渐变的焦点,从而实现不同的径向渐变效果。
  3. 路径渐变(PathGradientBrush

    • 路径渐变是沿着一个闭合的路径(如形状的轮廓)进行渐变填充。
    • 这种渐变可以是任何形状,不仅限于直线或圆形,因此它提供了极高的灵活性。
    • PathGradientBrush 允许你定义一个路径(如矩形、圆形、多边形或自定义形状),然后在这个路径的轮廓上应用渐变效果。
    • 路径渐变非常适合用于复杂的图形设计,比如沿着特定形状的轮廓进行颜色渐变。

示例代码对比

线性渐变示例
using System.Drawing;
using System.Drawing.Drawing2D;public void DrawLinearGradient(Graphics g)
{Rectangle rect = new Rectangle(0, 0, 200, 200);LinearGradientBrush linearBrush = new LinearGradientBrush(rect.Location, // 渐变开始的坐标new Point(rect.Right, rect.Bottom), // 渐变结束的坐标Color.Blue, // 渐变开始的颜色Color.White // 渐变结束的颜色);g.FillRectangle(linearBrush, rect);linearBrush.Dispose();
}
径向渐变示例(使用 PathGradientBrush
using System.Drawing;
using System.Drawing.Drawing2D;public void DrawRadialGradient(Graphics g)
{GraphicsPath path = new GraphicsPath();path.AddEllipse(0, 0, 200, 200); // 添加一个圆形路径PathGradientBrush radialBrush = new PathGradientBrush(path);radialBrush.CenterColor = Color.Blue;radialBrush.SurroundColors = new Color[] { Color.White };g.FillPath(radialBrush, path);radialBrush.Dispose();path.Dispose();
}
路径渐变示例(使用 PathGradientBrush
using System.Drawing;
using System.Drawing.Drawing2D;public void DrawPathGradient(Graphics g)
{GraphicsPath path = new GraphicsPath();path.AddRectangle(new Rectangle(0, 0, 200, 200)); // 添加一个矩形路径PathGradientBrush pathBrush = new PathGradientBrush(path);pathBrush.CenterColor = Color.Blue;pathBrush.SurroundColors = new Color[] { Color.White };g.FillPath(pathBrush, path);pathBrush.Dispose();path.Dispose();
}

总结

  • 线性渐变:沿着直线渐变,适用于简单的背景或效果。
  • 径向渐变:从中心向外辐射,适用于圆形或球形效果。
  • 路径渐变:沿着任意路径渐变,适用于复杂形状和自定义效果。

每种渐变类型都有其独特的用途和视觉效果,可以根据具体需求选择合适的画刷类型。

相关文章:

C#中的各种画刷, PathGradientBrush、线性渐变(LinearGradientBrush)和径向渐变的区别

在C#中,画刷(Brush)是用来填充图形(如形状或文本)内部区域的对象。在.NET框架中,画刷是System.Drawing命名空间的一部分,通常用于GDI绘图操作。以下是一些常用的画刷类型: SolidBru…...

如何在Mac中修改pip的镜像源

一. 修改步骤 进入命令行 进入到用户根目录 cd ~/在用户根目录下创建 .pip 文件夹 mkdir .pip进入到 ~/.pip 文件夹内 cd ~/.pip创建 pip.conf 文件 vim pip.conf在 pip.conf 文件中添加清华大学的镜像源,如下: [global] index-urlhttps://pypi.tuna.ts…...

MySQL你必须知道的事

文章目录 前言一、InnoDB的数据页,和B树的关系?二、为什么InnoDB三层B树可以存2000w数据三、什么是InnoDB的页分裂和页合并四、什么是回表?怎么减少回表的次数?什么是覆盖索引,索引下推?覆盖索引索引下推总…...

Ceph RBD使用

CephRBD使用 一、RBD架构说明二、RBD相关操作1、创建存储池2、创建img镜像2.1 创建镜像2.1.2 查看镜像详细信息2.1.3 镜像其他特性2.1.4 镜像特性的启用和禁用 3、配置客户端使用RBD3.1 客户端配置yum源3.2 客户端使用admin用户挂载并使用RBD3.2.1 同步admin账号认证文件3.2.2 …...

Spark MLlib模型训练—回归算法 Random forest regression

Spark MLlib模型训练—回归算法 Random forest regression 随机森林回归 (Random Forest Regression) 是一种集成学习方法,通过结合多个决策树的预测结果来提升模型的准确性和稳健性。相较于单一的决策树模型,随机森林通过随机采样和多棵树的集成,减少了模型的方差,从而在…...

华为OD机试真题-数大雁-2024年OD统一考试(E卷)

题目描述: 一群大雁往南飞,给定一个字符串记录地面上的游客听到的大雁叫声,请给出叫声最少由几只大雁发出。具体的 大雁发出的完整叫声为”quack“,因为有多只大雁同一时间嘎嘎作响,所以字符串中可能会混合多个”quack”大雁会依次完整发出”quack”,即字符串中q,u,a,c,k这5个…...

Oracle数据迁移:导出与导入的详细指南

在数据库管理中,数据的导出与导入是一项常见的任务,无论是为了数据迁移、备份还是其他目的。Oracle数据库提供了多种工具和方法来实现数据的导出和导入。本文将详细介绍如何在Oracle中实现数据的导出和导入,包括使用Oracle SQL Developer、Or…...

SpringBoot实现前后端传输加密设计

在Web应用中,确保前后端之间的数据传输安全是非常重要的。这通常涉及到使用HTTPS协议、数据加密、令牌验证等安全措施。本文通过将前后端之间的传输数据进行加密,用于在Spring Boot应用中实现前后端传输加密设计。 一、数据加密方案 即使使用了HTTPS&…...

X 射线测厚仪-高效精准,厚度测量的卓越之选

在现代工业的舞台上,对精准度和效率的追求从未停歇。而 X 射线测厚仪,宛如一颗璀璨的明星,以其高效精准的特质,成为厚度测量的卓越之选。 X 射线测厚仪,是科技与智慧的完美结晶。它凭借先进的 X 射线技术,…...

10款好用的文件加密软件排行榜|文件加密管理软件推荐(合集篇)

某企业在疫情期间实行远程办公政策,所有员工通过公司提供的VPN访问内部系统。为了保障数据安全,然而,某位员工为了加快工作进度,将文件下载到个人电脑上进行编辑。 在一次在线会议中,员工不慎将这份未加密的文件通过非…...

服务器蓝屏该怎么办

服务器蓝屏是一种常见但严重的问题,可能会导致系统无法正常工作和数据损失。遇到服务器蓝屏时,及时采取正确的措施至关重要。以下是处理服务器蓝屏的步骤: 1. 记录蓝屏错误信息 首先,记录下蓝屏错误代码和相关信息。这些信息通常显…...

Elasticsearch:使用 inference API 进行语义搜索

本教程中的说明向您展示了如何将 inference API 工作流与各种服务结合使用来对你的数据执行语义搜索。为了说明问题的方便,我将使用 Cohere 服务来进行详细说明。更多其它服务,请详细参阅链接。 重要:有关在 Elastic Stack 中执行语义搜索的最…...

PVE开启核显直通

启用内核 IOMMU 支持 修改/etc/default/grub配置文件以启用 IOMMU 支持,将GRUB_CMDLINE_LINUX_DEFAULT修改为: GRUB_CMDLINE_LINUX_DEFAULT"quiet intel_iommuon iommupt"iommupt的参数建议添加,以提高未直通设备 PCIe 的性能&am…...

使用 Bert 做文本分类,利用 Trainer 框架实现 二分类,事半功倍

简介 使用 AutoModelForSequenceClassification 导入Bert 模型。 很多教程都会自定义 损失函数,然后手动实现参数更新。 但本文不想手动微调,故使用 transformers 的 Trainer 自动微调。 人生苦短,我用框架,不仅可保证微调出的模…...

Obsidian git sync error / Obsidian git 同步失敗

Issue: commit due to empty commit message Solution 添加commit資訊,確保不留空白 我的設置:auto-backup: {{hostname}}/{{date}}/...

谷歌英文SEO外链如何做?

做英文SEO外链涉及多种策略和技巧,目标是提升目标网站的排名和流量,Google的搜索算法在不断演变,但外链一直是搜索引擎优化中重要的一环。有效的外链建设能够显著提升网站的SEO数据效果。关键在于创建一个多元化且自然的外链结构。不能仅仅依…...

vue使用Export2Excel导出表格

安装插件 npm install xlsx xlsx-style file-saver npm install node-polyfill-webpack-plugin (如果不安装的话后面使用会报错) 添加相关配置 在vue.config.js文件 const NodePolyfillPlugin require("node-polyfill-webpack-plugin") module.exports defineCon…...

Linux环境变量 本地变量 命令行参数

并行和并发 并行 多个进程在多个 CPU 下分别,同时进行运行。 并发 多个进程在一个 CPU 采用进程切换的方式,在一段时间内,让多个进程都得以推进,称之为并发。 CPU 中的寄存器扮演什么角色? 寄存器:cpu 内的寄存器里面保存的是进程…...

向量数据库Faiss的搭建与使用

1. 什么是Faiss? Faiss是由Facebook AI Research团队开发的一个库,旨在高效地进行大规模向量相似性搜索。它不仅支持CPU,还能利用GPU进行加速,非常适合处理大量高维数据。Faiss提供了多种索引类型,以适应不同的需求&a…...

微信小程序接入客服功能

前言 用户可使用小程序客服消息功能,与小程序的客服人员进行沟通。客服功能主要用于在小程序内 用户与客服直接沟通用,本篇介绍客服功能的基础开发以及进阶功能的使用,另外介绍多种客服的对接方式。 更多介绍请查看客服消息使用指南 客服视…...

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

linux之kylin系统nginx的安装

一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

云计算——弹性云计算器(ECS)

弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...

大型活动交通拥堵治理的视觉算法应用

大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...

大语言模型如何处理长文本?常用文本分割技术详解

为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

算法岗面试经验分享-大模型篇

文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题

分区配置 (ptab.json) img 属性介绍: img 属性指定分区存放的 image 名称,指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件,则以 proj_name:binary_name 格式指定文件名, proj_name 为工程 名&…...

【笔记】WSL 中 Rust 安装与测试完整记录

#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统:Ubuntu 24.04 LTS (WSL2)架构:x86_64 (GNU/Linux)Rust 版本:rustc 1.87.0 (2025-05-09)Cargo 版本:cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...