Drawing2D.Matrix 有什么好的解释吗?

Is there a good explanation of Drawing2D.Matrix anywhere?

The documentation for this gives a couple of examples 但我找不到任何内容来说明转换中每个设置的作用。

我正在尝试想出一个可以对绘制的内容进行垂直翻转的转换。

谢谢 - 戴夫

转换存储在一个 3x3 矩阵中,很难直观地判断矩阵的每个分量的作用。这就是为什么您会获得一组可以使用的函数,您可以将它们链接在一起。比如你想把一张图片顺时针旋转90度,然后放大两倍,可以用

Matrix myMatrix = new Matrix();
myMatrix.Rotate(90);
myMatrix.Scale(2, 2, MatrixOrder.Append);

MatrixOrder.Append表示缩放必须在前面的变换之后进行(这里的顺序很重要)

您要使用的主要功能有:

  • RotateAt(Single a, Point o) 围绕一个点顺时针旋转图像
  • Scale(Single a, Single b) 在 X 轴和 Y 轴上缩放图像 - 基本上,(x, y) 变为 (ax, by)
  • Translate(Single a, Single b) 在 X 轴和 Y 轴上平移图像 - 基本上,(x, y) 变为 (a + x, b + y)。

要垂直翻转图像,您只需要 Scale(-1, 1)。每个点 (x, y) 都会被转化为 (-x, y)。如果您需要围绕与轴 y = 0 不同的垂直轴翻转图像,则需要将其与 Translate.

结合使用

请注意,从数学上讲,任何仿射变换都可以分解为平移、旋转和缩放矩阵的乘积。如果您不想进行计算,您正在使用的 API 还提供了一些更方便的功能,例如 Shear

Here是比较详细的解释。它在末尾包含一些代码。