GraphicsPath 与 GDI+ 矩阵变换 Transform 实战
在 C# WinForms 开发中,GDI+ 提供了强大的图形处理能力。很多时候,我们不仅仅需要绘制静态图形,还需要对路径进行动态变换,比如旋转、缩放或倾斜。GraphicsPath 配合 Matrix 类是实现这些效果的基石。
核心原理
Matrix 类代表一个几何变换矩阵。它允许我们以数学的方式定义图形的位移和变形。需要注意的是,变换的顺序至关重要。先旋转再平移,与先平移再旋转,得到的结果完全不同。在实际应用中,通常需要根据视觉需求调整矩阵乘法的顺序。
代码实现
下面是一个完整的 WinForms 示例,展示了如何在 OnPaint 事件中构建路径并应用矩阵变换。为了保持界面整洁,这里省略了设计器生成的冗余代码,直接聚焦于绘图逻辑。
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
// 创建画笔和画刷
using (var pen = new Pen(Color.Black, 2))
using (var brush = new SolidBrush(Color.Blue))
{
// 初始化路径
var path = new GraphicsPath();
// 添加一些简单的形状作为测试对象
path.AddRectangle(new RectangleF(10, 10, 50, 50));
path.AddEllipse(new RectangleF(80, 10, 50, 50));
// 准备变换矩阵
var matrix = new Matrix();
// 设置偏移量,用于移动整个图形组
const float offsetValue = 80.0f;
// 组合变换:先平移,再旋转
matrix.Translate(offsetValue, );
matrix.Rotate();
path.Transform(matrix);
e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
e.Graphics.FillPath(brush, path);
e.Graphics.DrawPath(pen, path);
}
}

