1

我已经使用了 Matrix 类一千次。我对矩阵数学有基本的了解,自从我上过这门课以来已经有好几年了。但是我不完全理解这个类在后台做了什么来操纵 GraphicsPath 中的点。

具体来说,它在其中做什么,尤其是与 GraphicsPaths 相关?或者另一种看待它的方式,如果 Matrix 类不存在,而我必须创建自己的类,它会是什么样子,它会做什么?(我不是在创造我自己的,我只是想了解它)

此外,有人知道 Matrix 类中使用的矩阵的尺寸吗?

编辑:我已将其范围缩小到反射器中的以下调用。从那里,我得到了小吻。

[DllImport("gdiplus.dll", CharSet=CharSet.Unicode, SetLastError=true, ExactSpelling=true)]
internal static extern int GdipTransformPath(HandleRef path, HandleRef matrix);
4

3 回答 3

1

在这种情况下,Matrix 类是一个二维变换矩阵。矩阵用于缩放、旋转和/或平移图形路径。数学相对简单。您可以在这里查看: http ://en.wikipedia.org/wiki/Transformation_matrix

于 2009-08-05T14:52:04.707 回答
1

如果您要创建自己的矩阵类来回转换为 System.Drawing.Matrix 类,需要注意的一件重要事情是,.NET 在转换点时不使用最常用的标准。

.NET 矩阵似乎在转换发生之前被转置。

还在这里阅读背景:http: //www.codeproject.com/KB/recipes/psdotnetmatrix.aspx

于 2009-08-05T15:11:01.667 回答
0

基本上,GraphicsPath 是一组点和一个标志,这些标志解释了这些点如何相互关联。矩阵类只是将矩阵应用于这些点。

您可以实现同样的事情: 1. 创建一个新的空 GraphicsPath 2. 使用 GraphicsPathIterator,迭代路径(和子路径) 3. 获取每个点并应用矩阵 4. 将该点添加到新的 GraphicsPath

但不要这样做。GraphicsPath 中的类型没有很好的文档记录。

于 2009-08-05T14:49:05.540 回答