专栏首页程序你好CSharp代码示例每日一讲: 在GDI+中使用填充Fill方法

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)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

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

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 如何保证你的智能手机安全和私密,手机安全需要做到的事

    近十年以来,智能手机的应用越来广泛,各种流行的App层出不穷,可以说iPhone这样的智能手机已经彻底改变了我们的生活和行为习惯。请允许我指出一个显而易见的事实...

    程序你好
  • 无服务器架构中的十大安全风险

    无服务器架构(作为服务或FaaS的功能)是应用程序在其上构建和部署后,可以根据云工作负载流自伸缩的架构。从开发的角度来看,无服务器架构主要关注核心功能,而忽略所...

    程序你好
  • CSharp每日代码示例:使用iTextSharp创建PDF文件

    程序你好
  • Android跨进程通信IPC之1——Linux基础

    由于Android系统是基于Linux系统的,所以有必要简单的介绍下Linux的跨进程通信,对大家后续了解Android的跨进程通信是有帮助的,本篇的主要内容如...

    隔壁老李头
  • C#调用OpenCV开发简易版美图工具

    本文主要介绍在WPF项目中使用OpenCVSharp3-AnyCPU开源类库处理图片,下面我们先来做开发前的准备工作。

    Kiba518
  • 【奇技淫巧】-- 原地旋转链表

    看、未来
  • saltstack安装报错

    Error: Package: salt-2015.5.10-2.el6.noarch (epel)

    张琳兮
  • 求生之路2服务器搭建教程

    《求生之路2》(英语:Left 4 Dead 2)是2008年由V社开发、以丧尸为主题的恐怖生存类游戏《求生之路》的续作,游戏初次于2009年电玩E3展亮相,并...

    GeekZ
  • NIO复习(2):channel

    上篇学习了NIO的buffer,继续来学习channel,类图如下(注:为了不让图看起来太复杂,隐藏了一些中间的接口)

    菩提树下的杨过
  • 「React 手册 」从创建第一个 React 组件开始学起

    大家好,在本系列的前三篇文章里,我们一起学习了在 React 中经常会用到的 ES6 新特性,以及 REACT 16+ 版本的一些新特性 和 团队 成员在 Wi...

    前端达人

扫码关注云+社区

领取腾讯云代金券