有没有对Drawing2D.Matrix有任何好的解释?

时间:2016-07-30 17:45:41

标签: system.drawing affinetransform

The documentation for this gives a couple of examples但我无法找到任何可以解决转换中每个设置的内容。

我正在尝试一种可以垂直翻转所绘制内容的变换。

谢谢 - 戴夫

1 个答案:

答案 0 :(得分:0)

变换存储在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是一个更详细的解释。它最后包含一些代码。

相关问题