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是比较详细的解释。它在末尾包含一些代码。
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是比较详细的解释。它在末尾包含一些代码。