CSharp代码示例每日一讲: 在GDI+中使用填充Fill方法

CSharp代码示例每日一讲,为刚刚学习编程的人准备,利用最简单的代码介绍CSharp编程知识!

画笔Pen被用来绘制图形、形状,画刷用来填充图形形状的内部。今天,我们将介绍图形类的填充方法。您只能填充某些图形形状;在Graphics类中只有少量的填充方法。

FillCloseCurve方法

FillCloseCurve填充曲线的内部,填充曲线的第一个参数是画刷,它可以是实心画刷solid brush, 影线画刷hatch brush, 或者渐变画刷gradient brush。第二个参数是绘制点的数组,第三和第四参数是可选的。第三个参数是FillMode填充模式,填充模式是个枚举类型,表示填充模式。FillMode枚举指定填充闭合路径的方式。它有两种模式:交替 alternate 或围绕winding。默认模式是交替的。填充模式只在曲线与自身相交时才重要。

要使用FillClosed填充一个封闭的曲线,应用程序首先创建一个画笔对象和一个指向该曲线的点数组。然后应用程序可以设置填充模式和张力(可选),最后调用FillClosedCurve方法进行填充。

示例:创建了一个PointF结构数组和一个SolidBrush对象,并调用FillClosedCurve。

使用FillClosedCurve填充闭合曲线

 private void Form1_Paint (object sender,System.Windows.Forms.PaintEventArgs e){
            // Create a pen
            Pen bluePen = new Pen (Color.Blue, 1);
            // Create an array of points
            PointF pt1 = new PointF(40.0F, 50.0F);
            PointF pt2 = new PointF(50.0F, 75.0F);
            PointF pt3 = new PointF(100.0F, 115.0F);
            PointF pt4 = new PointF(200.0F, 180.0F);
            PointF pt5 = new PointF(200.0F, 90.0F);
                        
            PointF[] ptsArray = {pt1, pt2, pt3, pt4, pt5};
            
            // Fill a closed curve
            float tension = 1.0F;
            FillMode flMode = FillMode.Alternate;
            SolidBrush blueBrush = new SolidBrush(Color.Blue);
            e.Graphics.FillClosedCurve(blueBrush,ptsArray,flMode,tension);
            
            // Dispose of object
            blueBrush.Dispose();
}

填充方法:

Method

Description

FillCloseCurve

Fills the interior of a closed cardinal spline curve defined by an array of Point structures.

FillEllipse

Fills the interior of an ellipse defined by a bounding rectangle specified by a pair of coordinates, a width and a height.

FillPath

Fills the interior of a GraphicsPath object.

FillPie

Fills the interior of a pie section defined by an ellipse specified by a pair of coordinates, a width, a height, and two radial lines.

FillPolygon

Fills the interior of a polygon defined by an array of points specified by Point structures.

FillRectangle

Fills the interior of a rectangle specified by a pair of a coordinates, a width, and a height.

FillRectangles

Fills the interiors of a series of rectangles specified by Rectangle structures.

FillRegion

Fills the interiors of a Region object.

FillEllipse方法

FillEllipse填充椭圆的内部。它使用画刷对象和矩形坐标。

要使用FillEllipse填充椭圆,应用程序将创建一个画刷和一个矩形,并调用FillEllipse。

下面代码创建三个笔刷,并调用FillEllipse用画刷填充椭圆。

private void Form1_Paint(object sender,System.Windows.Forms.PaintEventArgs e){
            Graphics g = e.Graphics;
            
            // Create brushes
            SolidBrush redBrush = new SolidBrush(Color.Red);
            SolidBrush blueBrush = new SolidBrush(Color.Blue);
            SolidBrush greenBrush = new SolidBrush(Color.Green);
            
            //Create a rectangle
            Rectangle rect = new Rectangle(80, 80, 50, 50);
            
            // Fill ellipses
            g.FillEllipse(greenBrush, 40.0F, 40.0F, 130.0F, 130.0F);
            g.FillEllipse(blueBrush, 60, 60, 90, 90);
            g.FillEllipse(greenBrush, 100.0F, 90.0F, 10.0F, 30.0F);
            
            // Dispose of objects
            blueBrush.Dispose();
            redBrush.Dispose();
            greenBrush.Dispose();
}

结果如下:

FillPath方法

FillPath填充图形路径的内部,为此,应用程序创建画刷和图形对象,并调用FillPath,该方法以画刷和图形路径作为参数。

创建GraphicsPath和SolidBrush对象,并调用FillPath,代码如下:

private void Form1_Paint(object sender,
            System.Windows.Forms.PaintEventArgs e)        {
            
                        // Create a solid brush
                        SolidBrush greenBrush = new SolidBrush(Color.Green);
            
                        // Create a graphics path
                        GraphicsPath path = new GraphicsPath();
            
                        // Add a line to the path
                        path.AddLine(20, 20, 103, 80);
            
                        // Add an ellipse to the path
                        path.AddEllipse(100, 50, 100, 100);
            
                        // Add three more lines
                        path.AddLine(195, 80, 300, 80);
                        path.AddLine(200, 100, 300, 100);
                        path.AddLine(195, 120, 300, 120);
            
                        // Create a rectangle and call AddRectangle
                        Rectangle rect = new Rectangle(50, 150, 300, 50);
                        path.AddRectangle(rect);
            
                        // Fill path
                        e.Graphics.FillPath(greenBrush, path);
            
                        // Dispose of object
                        greenBrush.Dispose();
           }
}

如图所示,填充方法填充图形路径的所有覆盖区域。

FillPie方法

FillPie用指定的画笔填充pie部分。它有四个参数:画刷,椭圆的矩形,开始和扫角。下面的代码调用FillPie。

g.FillPie(new SolidBrush (Color.Red),
0.0F, 0.0F, 100, 60, 0.0F, 90.0F);

FillPolygon方法

FillPolygon用指定的画刷填充一个多边形。它需要三个参数:一个画刷、一个绘制点数组和一个填充模式。FillMode枚举定义路径内部的填充模式。它提供了两种填充模式:交替和环绕。默认模式是交替的。

在我们的应用中,我们将使用一个影线画刷。到目前为止,我们只看到了一把实心的刷子。实心笔刷是一种只有一种颜色的笔刷。HatchBrush类表示影线画刷,影线刷是一种带有影线风格和两种颜色的刷。

下面的代码使用FillPolygon用围绕模式填充一个多边形。

Graphics g = e.Graphics;

// Create a solid brush
SolidBrush greenBrush = new SolidBrush (Color.Green);

// Create points for polygon
PointF p1 = new PointF (40.0F, 50.0F);
PointF p2 = new PointF (60.0F, 70.0F);
PointF p3 = new PointF (80.0F, 34.0F);
PointF p4 = new PointF (120.0F, 180.0F);
PointF p5 = new PointF (200.0F, 150.0F);
PointF[] ptsArray =
{
p1, p2, p3, p4, p5
};

// Draw polygon
e.Graphics.FillPolygon (greenBrush, ptsArray);

// Dispose of objects
greenBrush.Dispose();

填充矩形

用画刷填充矩形。该方法以画刷和矩形作为参数。填充矩形使用画刷填充指定的一系列矩形,并使用画刷和矩形数组。这些方法也有额外的选项。例如,如果您使用的是HatchStyle画笔,您可以指定背景和前景颜色。

注意:HatchBrush类是在System.Drawing中定义的。Drawing2D命名空间。

下面代码使用fill矩形填充两个矩形。一个长方形充满了一个影线画刷,另一个用一个实心刷子。

private void Form1_Paint(object sender,
            System.Windows.Forms.PaintEventArgs e)
        {

 // Create brushes
 SolidBrush blueBrush = new SolidBrush(Color.Blue);

 // Create a rectangle
 Rectangle rect = new Rectangle(10, 20, 100, 50);

 // Fill rectangle
            e.Graphics.FillRectangle(new HatchBrush(HatchStyle.BackwardDiagonal, Color.Yellow,Color.Black), rect);
            e.Graphics.FillRectangle(blueBrush, new Rectangle(150, 20, 50, 100));

 // Dispose of object
            blueBrush.Dispose();
        }

FillRegion使用画刷填充指定区域。该方法以画刷和区域作为输入参数。

下面代码从矩形创建一个区域对象,并调用FillRegion来填充该区域。

Rectangle rect = new Rectangle (20, 20, 150, 100);
Region rgn = new Region(rect);
e.Graphics.FillRegion(new SolidBrush (Color.Green), rgn);

希望本文能够帮助您理解GDI+中的填充方法。

原文发布于微信公众号 - 程序你好(codinghello)

原文发表时间:2018-06-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏技术记录

im4java包处理图片

使用方法:首先要安装ImageMagick这个工具,安装好这个工具后,再下载im4java包放到项目lib目录里就行了。 package com.stu.uti...

3516
来自专栏菩提树下的杨过

Flash/Flex学习笔记(48):反向运动学(下)

先要复习一下三角函数与余弦定理: 对于直角三角形,三边长a,b,c与三个角A,B,C的关系如下: ? 正弦函数: ? 余弦函数: ? 正切函数: ? 反正切函数...

24610
来自专栏菩提树下的杨过

Silverlight:Mouse Avoiding 躲避鼠标效果

昨晚在一国外博客上(从域名后缀pl上猜想应该是波兰)看到这种效果(Mouse Avoid 躲避鼠标),是基于Flash/AS3开发的,这个示例把弹性运动,摩擦力...

2167
来自专栏叁金大数据

C#中Image , Bitmap 和 BitmapData

先说Image,Image 就是个图像,不能实例化,提供了位图和源文件操作的函数。本篇文章他就是来打酱油的,这里提供一个Bitmap转成BitmapSource...

2022
来自专栏游戏杂谈

as3绘制抛物线

一般做页游的过程中,特效的释放可能是不是固定位置的播放,是需要进行“运动的”(其实就是移动特效这个影响剪辑)。举个例子:步兵射箭,不确定箭发射的方向,事先也不...

1062
来自专栏听雨堂

mapx实现热点效果

        当鼠标移动到图元上方时,标注改变样式(变色,加下划线等),移开后还原。通过vb+mapx基本实现这个效果,但由于mapx在label进行变化时的...

1897
来自专栏向治洪

android动画之interpolator和typeEvaluator用法详解

Interpolator (插值器) 我们在写动画的时候为了达到某种效果往往需要设置插值器,用来真实的模拟生活中的场景。  Interpolator (插值器)...

2159
来自专栏海天一树

小朋友学Python(30):实现带UI的简易计算器(下)

一、最终效果 ? 8.png 二、完整程序 import tkinter #导入tkinter模块 #定义数值 w = 280 ...

41810
来自专栏阿凯的Excel

自定义单元格格式介绍(第二期 文本版)

上期和大家分享了自定义条件格式的数字版。本期继续和大家分享文本的自定义单元格格式! 继续强调啰嗦两件事情!!! 1、自定义单元格格式只改变显示内容,不改变实...

2906
来自专栏GIS讲堂

Arcgis for JS之Cluster聚类分析的实现

在做项目的时候,碰见了这样一个问题:给地图上标注点对象,数据是从数据库来的,包含XY坐标信息的,通过graphic和graphiclayer 的方式添加到地图上...

1893

扫码关注云+社区

领取腾讯云代金券