【问题标题】:Implementing Matrix Transform on New Object在新对象上实现矩阵变换
【发布时间】:2011-04-24 18:34:42
【问题描述】:

我需要能够转换我自己的对象之一以及 .Net 中的一些 GraphicsPath 对象。我需要在 GraphicsPath 对象上执行的任何缩放、平移、旋转操作也发生在我自己的对象上。

例如,这里有一些缩放代码:

using (Matrix ScaleTransform = new Matrix(1, 0, 0, 1, 0, 0)) // scale matrix
{
    ScaleTransform.Scale(ScaleX, ScaleY);
    moPath.Transform(ScaleTransform);
    moBoundingBox.Transform(ScaleTransform);

    MyObject.Transform(ScaleTranform);
}


//In "MyObject":
public void Transform(Matrix m)
{
    //How is this implemented?  Is there a built-in .Net method?
}

问题是: 在 MyObject 中实现“Transform”方法的最佳方法是什么?我进行了相当多的搜索,但找不到任何关于最佳方法的参考。

谢谢!

【问题讨论】:

  • 是的,GDI+(在 .Net 中)。 System.Drawing 和 System.Drawing.Drawing2D

标签: c# .net methods matrix graphicspath


【解决方案1】:

自己实现转换不是很难,看看:

http://en.wikipedia.org/wiki/Transformation_matrix

那么你的对象是位图还是什么?那么这可能是某种方式:

http://en.csharp-online.net/GDIplus_Graphics_Transformation%E2%80%94Image_Transformation

或者您可以离开您的对象并将转换推送到堆栈中,并在将其制作成图形时使用它。

嘿 - 看起来 Matrix 类可以为你做很多事情:

http://msdn.microsoft.com/en-us/library/system.drawing.drawing2d.matrix.aspx

例如

TransformPoints(Point[]) or TransformVectors(Point[])

【讨论】:

  • 您好 Rune,感谢您的回复。你给出的最后一个例子是我实际实现的那个。我只是将我所有的坐标都变成了“点”,然后将点数组传递给了内置的矩阵变换。所以,好主意! +1 并被接受。
猜你喜欢
  • 2018-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多