本文提供了此 API 参考文档的补充说明。
Matrix 类封装表示几何变换的 3x3 仿射矩阵。
在 GDI+ 中,可以将仿射变换存储在 Matrix 对象中。 由于表示相交转换的矩阵的第三列始终为 (0, 0, 1),因此在构造 Matrix 对象时,仅指定前两列中的六个数字。 该语句 Matrix myMatrix = new Matrix(0, 1, -1, 0, 3, 4)
构造下图所示的矩阵。
注释
在 .NET 6 及更高版本中,包含此类型的 System.Drawing.Common 包 仅支持在 Windows 操作系统上运行。 在跨平台应用中使用此类型会导致编译时警告和运行时异常。 有关详细信息,请参阅 仅在 Windows 上支持的 System.Drawing.Common。
复合转换
复合变换是一系列连续进行的变换。 请考虑以下列表中的矩阵和转换:
矩阵 | 转型 |
---|---|
矩阵 A | 旋转 90 度 |
矩阵 B | 在 x 方向上缩放 2 倍 |
矩阵 C | 在 y 方向平移 3 个单位 |
如果从点 (2, 1) 开始 - 由矩阵 [2 1 1] 表示, 乘以 A, 然后 B, 然后 C, 点 (2, 1) 将按列出的顺序进行三个转换。
[2 1 1]ABC = [-2 5 1]
无需将复合转换的三个部分存储在三个单独的矩阵中,可以将 A、B 和 C 相乘,以获取存储整个复合转换的单个 3×3 矩阵。 假设 ABC = D
。 然后,乘以 D 的点将得到与 A 乘以 A、B、C 相同的结果。
[2 1 1]D = [-2 5 1]
下图显示了矩阵 A、B、C 和 D。
复合转换的矩阵可以通过乘以单个转换矩阵来形成这一事实意味着任何相交转换序列都可以存储在单个 Matrix 对象中。
谨慎
复合转换的顺序非常重要。 一般来说,旋转、缩放、平移与缩放、旋转、平移是不同的。 同样,矩阵乘法的顺序也很重要。 通常,ABC 与 BAC 不同。
Matrix 类提供了几种用于生成复合转换的方法:Multiply、Rotate、RotateAt、Scale、Shear和 Translate。 以下示例创建了一个复合变换矩阵,该矩阵首先旋转 30 度,然后在 y 方向按 2 倍缩放,最后在 x 方向平移 5 个单位。
Matrix myMatrix = new Matrix();
myMatrix.Rotate(30);
myMatrix.Scale(1, 2, MatrixOrder.Append);
myMatrix.Translate(5, 0, MatrixOrder.Append);
Dim myMatrix As New Matrix()
myMatrix.Rotate(30)
myMatrix.Scale(1, 2, MatrixOrder.Append)
myMatrix.Translate(5, 0, MatrixOrder.Append)