我正在为 .NET 2.0/GDI+ 创建一个 2D 绘图框架。
我需要能够为不同的视觉效果定义变换,例如旋转和平移变换。我还需要能够根据这些转换将点坐标从祖先转换为子坐标。
所以我有如下功能:
public Matrix TransformToAncestor(Element ancestor)
public Matrix TransformToDescendant(Element descendant)
public PointF TransformPoint(Matrix matrix, PointF point)
我依靠矩阵类来执行以下功能:
相乘、反转、TransformPoints、RotateAt、缩放
我的问题是 Matrix 类是 IDisposable 并且不方便使用。我需要能够动态创建矩阵。我需要能够说,“给我一个矩阵来从这个元素转换到那个元素,并使用那个矩阵来转换这个点”。
Matrix 类使用 GDI+ 本机互操作分配非托管资源。因此,如果我不再需要它时不立即处理它,我可能会造成内存泄漏。
现在据我所知,Matrix 类只表示一个由 6 个元素组成的数组,并且它具有对这些元素执行数学运算的功能。进行互操作调用似乎有点矫枉过正。
我真的只需要一个轻量级的类来存储这 6 个值并有代码来操作它们。我对矩阵数学不够满意,无法自己编写所有代码。