2016-07-30 109 views

回答

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

相关问题