C#中使用CompoundArray绘制复合线条矩形

Jasper
Jasper
发布时间:2026-10-13 | 4人浏览过
原创

本文介绍了如何在 C# Windows Forms 应用程序中绘制带有复合线条效果的矩形。核心方法是使用 System.Drawing.Pen 类的 CompoundArray 属性,它允许定义画笔内部的线条分布,从而绘制出双线或多线边框。

实现目标与原理

CompoundArray 属性接收一个浮点数组,用于指定从画笔中心到边缘的相对位置。数组中的每个值应在 0.0 到 1.0 之间。当绘制形状时,GDI+ 会根据这些值在对应的比例位置绘制线条。
例如,若数组为 {0.0, 1.0},则会在边缘(0.0)和另一侧边缘(1.0)各画一条线,形成标准的双线框效果。

具体操作步骤

第 1 步:创建画笔并配置复合数组

首先实例化一个 Pen 对象,设定颜色和线宽,然后赋值 CompoundArray。数组元素越多,绘制的平行线越密集。

using System.Drawing;
using System.Drawing.Drawing2D;

// 创建蓝色画笔,宽度为 20 像素
Pen pen = new Pen(Color.Blue, 20);

// 设置复合数组:定义内部线条的位置
// 0.0 表示最内侧,1.0 表示最外侧
pen.CompoundArray = new float[] 
{
    0.0f,   // 第1条线(内侧)
    0.25f,  // 第2条线
    0.45f,  // 第3条线
    0.55f,  // 第4条线
    0.75f,  // 第5条线
    1.0f    // 第6条线(外侧)
};

第 2 步:获取 Graphics 对象

为了在窗体上绘图,需要获取当前窗体的绘图上下文 Graphics 对象。在事件处理程序中(如按钮点击),可以直接使用 this.CreateGraphics() 或重写 OnPaint 方法。

第 3 步:绘制矩形

调用 DrawRectangle 方法,传入配置好的画笔、矩形位置和尺寸。由于画笔较宽且包含复合数组,最终呈现的是一个具有多条平行纹理的矩形边框。

private void button1_Click(object sender, EventArgs e)
{
    // 重置背景以防累积
    this.Invalidate();

    using (Graphics g = this.CreateGraphics())
    {
        Pen pen = new Pen(Color.Blue, 20);
        pen.CompoundArray = new float[] { 0.0f, 0.25f, 0.45f, 0.55f, 0.75f, 1.0f };
        
        // 参数:画笔, x坐标, y坐标, 宽度, 高度
        Rectangle rect = new Rectangle(50, 50, 300, 200);
        g.DrawRectangle(pen, rect);
    }
}

注意事项与维护建议

  • 资源释放:Pen 和 Graphics 都实现了 IDisposable 接口,建议在使用后使用 using 语句或手动调用 Dispose 以释放非托管资源。
  • 绘制区域:如果需要在窗体刷新时保持图形,应将绘图代码移至 OnPaint(PaintEventArgs e) 方法中,并使用 e.Graphics 代替 CreateGraphics,否则窗口最小化再最大化后图像会丢失。
  • 数组对称性:为了实现美观的双线效果,通常数组首尾对应内侧和外侧,中间值按比例分配。数值需严格递增。

以上就是C#画笔使用CompoundArray绘制单个矩形的详细内容,更多关于C# GDI+绘图技巧的资料请关注本站其它相关文章!

相关标签:

本站声明

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

Python 相关产品和应用

全部下载

专题列表