C# Region 类实现自定义图形区域填充

一只小鹿
一只小鹿
发布时间:2026-10-13 | 5人浏览过
原创

在 C# Windows Forms 应用程序中,若需对非标准矩形或不规则图形区域进行填充,可使用 System.Drawing.Region 类。本文将展示如何通过 GraphicsPath 构建基于文本的路径,并将其转换为 Region,最终使用 FillRegion 方法完成区域渲染。

实现结果与目标

程序运行后,将在表单的指定坐标位置绘制一个倾斜(Italic)样式的 "zhuzhao" 文本,并使用红色笔刷完全填充该文本所占据的像素区域。此方法可用于创建自定义形状的遮罩、高亮特定UI元素或执行复杂的像素级操作。

准备条件

  • 开发环境:Visual Studio 及 .NET Framework

  • 命名空间引用:需引入 System.Drawing、System.Drawing.Drawing2D 以支持图形操作。

  • 控件要求:继承自 Form 的窗口类,能够响应 Paint 事件。

操作步骤

第1步:定义字体属性与路径参数

首先确定文本内容、字体族、样式及大小等参数。这些参数将决定最终生成的图形区域形状。代码入口为窗体的 OnPaint 事件处理函数或手动触发的绘画逻辑。

string stringText = "zhuzhao";
FontFamily family = new FontFamily("Arial");
int fontStyle = (int)FontStyle.Italic;
int emSize = 26;
Point origin = new Point(20, 20); // 设置文本起始坐标
StringFormat format = StringFormat.GenericDefault;

第2步:构建 GraphicsPath 对象

GraphicsPath 用于记录一系列直线和曲线命令。调用 AddString 方法可将指定的文本按照设定的字体属性转化为几何路径。这是将文字转化为可操控图形区域的关键步骤。

GraphicsPath myPath = new GraphicsPath();
myPath.AddString(stringText, family, fontStyle, emSize, origin, format);

第3步:生成 Region 对象并填充颜色

利用上一步生成的路径创建 Region 实例。随后,获取窗体的 Graphics 对象,调用 FillRegion 方法,传入选定的画刷(如 Brushes.Red)和创建的 Region 对象,即可完成区域填充。

Region region = new Region(myPath);
e.Graphics.FillRegion(Brushes.Red, region);

完整代码示例

以下是将上述步骤整合在一个完整的 Windows Forms 窗体类中的实现。该类继承自 Form,并在其 Paint 事件中执行绘图逻辑。

using System;
using System.Windows.Forms;
using System.Drawing;
using System.Drawing.Drawing2D;

namespace advanced_drawing
{
    public partial class Form15 : Form
    {
        public Form15()
        {
            InitializeComponent();
        }

        private void Form15_Paint(object sender, PaintEventArgs e)
        {
            // 1. 定义路径相关参数
            GraphicsPath myPath = new GraphicsPath();
            string stringText = "zhuzhao";
            FontFamily family = new FontFamily("Arial");
            int fontStyle = (int)FontStyle.Italic;
            int emSize = 26;
            Point origin = new Point(20, 20);
            StringFormat format = StringFormat.GenericDefault;

            // 2. 添加字符串到路径
            myPath.AddString(stringText, family, fontStyle, emSize, origin, format);

            // 3. 创建 Region 并填充
            Region region = new Region(myPath);
            e.Graphics.FillRegion(Brushes.Red, region);
        }
    }
}

注意事项与排错

内存管理: GraphicsPath 和 Region 对象实现了 IDisposable 接口。如果在循环或频繁调用的场景中创建这些对象,建议在使用完毕后调用 Dispose() 方法或将其包裹在 using 语句中,以防止 GDI 资源泄漏。

版本差异: StringFormat.GenericDefault 是静态只读属性,确保使用的是默认格式设置。若需特殊对齐或断行方式,请实例化自己的 StringFormat 对象。

总结

通过组合 GraphicsPath 与 Region,开发者可以灵活地在 C# 中实现对任意形状区域的精确填充与控制。这种方法不仅限于文本,还可应用于复杂矢量图形的裁剪与合成操作中。

以上就是C#使用Region对图形区域构造和填充方法的详细内容,更多关于C#高级绘图技巧的资料请关注本站其它相关文章!
相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表