我有一个包含旋转和平移变换的System.Drawing.Drawing2D.Matrix,我需要将其应用到一个精灵上。不幸的是,旋转的原点在精灵的左上角。
如何将旋转原点更改为精灵的中心?
目前你的变换矩阵包括一个旋转(原点在左上角),乘以一个平移(从原始左上角到新的左上角)。
要更改旋转的原点,您需要先进行另一次平移:
将 (-宽度的一半,-高度的一半) 平移以使对象居中
然后进行旋转(现在以精灵的中心为中心)
最后进行最终平移(加上第一步中减去的一半宽度和一半高度)。
还有一个RotateAt()
方法,您可以使用它来指定您想要的原点。只需在参数中传递一个PointF
结构,即可将原点放置在所需位置。
很遗憾,所有提出的解决方案对我都不起作用。它们似乎是好的解决方案,可能在其他情况下会起作用,但在我的情况下不行。
然而,我找到了一个可行的解决方案:
我已经将矩阵的OffsetX和OffsetY字段的值更改为以下内容:
OffsetX = OffsetX - M11 * hx - M21 * hy + hx;
OffsetY = OffsetY - M12 * hx - M11 * hy + hy;
其中hx代表精灵的一半宽度,hy代表精灵的一半高度,M11、M12和M21是对应的矩阵字段。