17.2 图形绘制2

news/2025/2/1 14:55:41/

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。

17.2.3 Brush类

Brush 类用于填充图形形状(如矩形、椭圆、饼形、多边形和封闭路径)的内部。这是一个抽象基类,不能进行实例化。如果若要创建一个画刷对象,应使用从 Brush 派生出的类,包括:

  1. SolidBrush类:单种颜色来填充形状的内部。
  2. TextureBrush类:使用图像来填充形状的内部。
  3. HatchBrush类:用阴影样式来填充形状的内部。
  4. LinearGradientBrush类:使用线性渐变来填充形状的内部。
  5. PathGradientBrush类:通过路径渐变来填充形状的内部。

注意:后面三种画刷都是在System.Drawing.Drawing2D命名空间下面。

17.2.3.1 SolidBrush类

SolidBrush构造函数:

  1. public SolidBrush( Color color )

参数说明:

  1. color:指定了画刷使用的颜色。

例如声明一个红色的画刷:

SolidBrush myBrush = new SolidBrush(Color.Red);

SolidBrush常用属性:

  1. Color:画笔使用的颜色。

【例 17.6【项目:code17-006】使用SolidBrush填充图形。

        private void button1_Click(object sender, EventArgs e)

        {

            //使用红色初始化画刷

            SolidBrush myBrush = new SolidBrush(Color.Red);

            //窗体上创建Graphics对象

            Graphics g = this.CreateGraphics();

            //使用窗体背景色清除

            g.Clear(this.BackColor);

            //使用画刷填充一个矩形

            g.FillRectangle(myBrush, new Rectangle(10, 10, 120, 120));

            //更改画刷颜色

            myBrush.Color = Color.Blue;

            //再次使用画刷填充矩形

            g.FillRectangle(myBrush, new Rectangle(130, 10, 120, 120));

            //释放资源

            g.Dispose();

        }

运行结果如下图所示:

图17-7 使用SolidBrush填充矩形

17.2.3.2 TextureBrush类

TextureBrush构造函数常用的一个重载版本:

public TextureBrush( Image image, WrapMode wrapMode )

参数说明:

  1. image:一个Image对象,此画刷将使用该Image来填充其内部。
  2. wrapMode:指定Image的平铺方式,这是一个WrapMode枚举,包含以下成员:
  1. Clamp:纹理或渐变没有平铺。
  2. Tile:平铺渐变或纹理。
  3. TileFlipX:水平反转纹理或渐变,然后平铺该纹理或渐变。
  4. TileFlipY:垂直反转纹理或渐变,然后平铺该纹理或渐变。
  5. TileFlipXY:水平和垂直反转纹理或渐变,然后平铺该纹理或渐变。

【例 17.7【项目:code17-007】使用TextureBrush填充图形。

        private void button1_Click(object sender, EventArgs e)

        {

            Bitmap bmp1 =new Bitmap("c:\\lessons\\g.png");

            //使用图像平铺模式

            TextureBrush myBrush =new TextureBrush(bmp1, System.Drawing.Drawing2D.WrapMode.Tile);

            Graphics g = this.CreateGraphics();

            g.Clear(this.BackColor);

            g.FillRectangle(myBrush, new Rectangle(10, 10, 120, 120));

            //更换平铺方式为水平和垂直反转

            myBrush.WrapMode = System.Drawing.Drawing2D.WrapMode.TileFlipXY;

            g.FillRectangle(myBrush, new Rectangle(130, 10, 120, 120));

            g.Dispose();

     }

运行结果如下图所示:

图17-8 使用TextureBrush填充矩形

17.2.3.3 HatchBrush类

HatchBrush构造函数常用的一个重载版本:

public HatchBrush( HatchStyle hatchstyle, Color foreColor, Color backColor )

参数说明:

  1. hatchstyle:此HatchBrush所绘制的图案。这是一个HatchStyle枚举。
  2. foreColor:Color结构,表示此HatchBrush所绘制线条的颜色。
  3. backColor:Color结构,表示此HatchBrush绘制的线条间空间的颜色。

【例 17.8【项目:code17-008】使用HatchBrush填充图形。

由于HatchStyle枚举成员众多,这里在程序中显示每种图案。

        int myHatchStyle = 0;

        private void button1_Click(object sender, EventArgs e)

        {

            myHatchStyle += 1;

            if (myHatchStyle == 53)

                myHatchStyle = 0;

            //使用不同的HatchStyle,红色前景色,白色背景色初始化HatchBrush

            HatchBrush myBrush = new HatchBrush((HatchStyle)myHatchStyle, Color.Red, Color.White);

            Graphics g = this.CreateGraphics();

            g.Clear(this.BackColor);

            g.FillRectangle(myBrush, new Rectangle(10, 10, 240, 120));

            g.Dispose();

        }

运行结果如下图所示:

图17-9 使用HatchBrush填充矩形时的一种HatchStyle图案

17.2.3.4 LinearGradientBrush类

LinearGradientBrush构造函数常用的一个重载版本:

public LinearGradientBrush( Point point1, Point point2, Color color1, Color color2 )

参数说明:

  1. point1:表示线性渐变起始点的Point结构。
  2. point2:表示线性渐变终结点的Point结构。
  3. color1:表示线性渐变起始色的Color结构。
  4. color2:表示线性渐变结束色的Color结构。

常用属性:

  1. Blend:指定定义渐变自定义过渡的位置和因子。
  2. GammaCorrection:指示是否启用了灰度校正。
  3. InterpolationColors:定义多色线性渐变的ColorBlend类。
  4. LinearColors:渐变的起始色和结束色。

注意:如果设置了InterpolationColors属性,那么ColorBlend类的Colors和Positions两个属性必须设置相同数量,而且,确保Positions中数组的值从0开始,1结束,例如:

Color[] c={ Color.Red, Color.White, Color.Blue, Color.White, Color.Green };

 Single[] p = { 0, 0.25f, 0.5f, 0.75f, 1.0f};

【例 17.9【项目:code17-009】使用LinearGradientBrush填充图形。

        //生成红-白渐变的矩形

        private void button1_Click(object sender, EventArgs e)

        {

            LinearGradientBrush myBrush = new LinearGradientBrush(new Point(0, 0), new Point(100, 0), Color.Red, Color.White);

            Graphics g = this.CreateGraphics();

            g.Clear(this.BackColor);

            g.FillRectangle(myBrush, new Rectangle(10, 10, 300, 120));

            g.Dispose();

        }

        //生成红-白-蓝-白-绿渐变的矩形

        private void button2_Click(object sender, EventArgs e)

        {

            LinearGradientBrush myBrush = new LinearGradientBrush(new Point(0, 0), new Point(100, 0), Color.Red, Color.White);

            ColorBlend myColorBlend = new ColorBlend();

            Color[] c={ Color.Red, Color.White, Color.Blue, Color.White, Color.Green };

            Single[] p = { 0, 0.25f, 0.5f, 0.75f, 1.0f};

            myColorBlend.Colors = c;

            myColorBlend.Positions = p;

            myBrush.InterpolationColors = myColorBlend;

            Graphics g = this.CreateGraphics();

            g.Clear(this.BackColor);

            g.FillRectangle(myBrush, new Rectangle(10, 10, 300, 120));

            g.Dispose();

        }

运行结果如下图所示:

图17-10 使用LinearGradientBrush填充矩形

17.2.3.5 PathGradientBrush类

PathGradientBrush构造函数常用的一个重载版本:

public PathGradientBrush( GraphicsPath path )

参数说明:

  1. path:GraphicsPath类型,定义此 PathGradientBrush 填充的区域。

PathGradientBrush常用属性:

  1. Blend:指定定义渐变自定义过渡的位置和因子。
  1. CenterColor:路径渐变的中心处的颜色。
  2. CenterPoint:路径渐变的中心点,如果没有指定,那么将自动使用
  3. SurroundColors:此PathGradientBrush填充的路径中的点相对应的颜色的数组。
  4. WrapMode:指定渐变图像的平铺方式。这是一个WrapMode枚举(请参看第17.2.3.2节),默认是Clamp(不平铺)。

【例 17.10【项目:code17-010】使用PathGradientBrush填充图形。

        private void button1_Click(object sender, EventArgs e)

        {

            //声明一个GraphicsPath类

            GraphicsPath path =new GraphicsPath();

            //向此路径添加一个矩形

            path.AddRectangle(new RectangleF(10, 10, 120, 120));

            //使用之前声明的路径初始化画刷

            PathGradientBrush myBrush = new PathGradientBrush(path);

            //定义环绕颜色数组

            Color[] myColor = { Color.Red, Color.Green, Color.Blue, Color.Yellow};

            //设置环绕颜色

            myBrush.SurroundColors = myColor;

            //设置中心点颜色

            myBrush.CenterColor = Color.White;

            //设置渐变中心点

            myBrush.CenterPoint = new Point(50, 50);

            //设置填充区域内渐变的平铺方式

            myBrush.WrapMode = WrapMode.Tile;

            Graphics g = this.CreateGraphics();

            g.Clear(this.BackColor);

            //再声明一个GraphicsPath类

            GraphicsPath pathtoFill =new GraphicsPath();

            //向此路径添加一个矩形

            pathtoFill.AddRectangle(new RectangleF(10, 10, 240, 120));

            //使用画刷填充路径

            g.FillPath(myBrush, pathtoFill);

            g.Dispose();

        }

运行结果如下图所示:

图17-11 使用PathGradientBrush填充矩形

 

学习更多vb.net知识,请参看vb.net 教程 目录

学习更多C#知识,请参看C#教程 目录


http://www.ppmy.cn/news/1568450.html

相关文章

基于Rectified Flow FLUX的图像编辑方法 RF-Solver

Diffusion Models专栏文章汇总:入门与实战 前言:现在越来越多的开源模型是基于Rectified Flow,特别是FLUX和HunYuan Video,但是Rectified Flow inversion的性质和之前有所不同,这篇博客解读一下如何使用Rectified Flow对FLUX进行编辑。 目录 RF直接逆向会出现问题 为什R…

本地运行大模型效果及配置展示

电脑上用ollama安装了qwen2.5:32b,deepseek-r1:32b,deepseek-r1:14b,llama3.1:8b四个模型,都是Q4_K_M量化版。 运行过程中主要是cpu和内存负载比较大,qwen2.5:32b大概需要22g,deepseek-r1:32b类…

Oracle 创建用户和表空间

Oracle 创建用户和表空间 使用sys 账户登录 建立临时表空间 --建立临时表空间 CREATE TEMPORARY TABLESPACE TEMP_POS --创建名为TEMP_POS的临时表空间 TEMPFILE /oracle/oradata/POS/TEMP_POS.DBF -- 临时文件 SIZE 50M -- 其初始大小为50M AUTOEXTEND ON -- 支持…

Hive详细讲解-概述与环境搭建

文章目录 1.Hive概述1.2.Hive架构原理1.3Driver 2.Hive最小化模式安装部署3.生产环境hive安装部署4.将hive的元数据存储到Mysql5.元数据库概述6.Hive服务的部署6.1HiveServer26.2Metastore 7.HiveServer2使用7.1Metastore嵌入模式配置7.2Metastore独立模式配置* 8.hive常用的参…

强化学习笔记——4策略迭代、值迭代、TD算法

基于策略迭代的贝尔曼方程和基于值迭代的贝尔曼方程,关系还是不太理解 首先梳理一下: 通过贝尔曼方程将强化学习转化为值迭代和策略迭代两种问题 求解上述两种贝尔曼方程有三种方法:DP(有模型),MC&#xff…

使用ArcMap或ArcGIS Pro连接达梦数据库创建空间数据库

一、ArcMap 1、本地windows安装 32 位 DM 数据库客户端 2、覆盖dll 将 32 位 DM 数据的..\dmdbms\bin 目录中的 .dll 文件全部拷贝到 ArcGIS 的 ..\Desktop10.5\bin 目录下,有同名文件直接覆盖掉 3、开启达梦数据库空间扩展支持 使用管理员用户登录数据&#xff…

Mysql的主从复制及扩展功能

一、配置过程 1.配置master vim /etc/my.cnf [mysqld] datadir/data/mysql 指定数据库文件的存储位置 socket/data/mysql/mysql.sock symbolic-links0 log-binmysql-bin 启用二进制日志,用于记录数据库的更…

初学stm32 --- FreeRTOS移植

目录 移植前准备 1. 基础工程 2. FreeRTOS 源码 添加 FreeRTOS 文件 1. 添加 FreeRTOS 源码 2. 将文件添加到工程 3. 添加头文件路径 4. 添加 FreeRTOSConfig.h 文件 (1) FreeRTOSConfig.h 获取途径一 (2) FreeRTOSConfig.h 获取途径二 (3) FreeRTOSConfig.h 获取途径…