Export (0) Print
Expand All

Matrix Class

Encapsulates a 3-by-3 affine matrix that represents a geometric transform. This class cannot be inherited.

System.Object
  System.MarshalByRefObject
    System.Drawing.Drawing2D.Matrix

Namespace:  System.Drawing.Drawing2D
Assembly:  System.Drawing (in System.Drawing.dll)

public sealed class Matrix : MarshalByRefObject, 
	IDisposable

The Matrix type exposes the following members.

  NameDescription
Public methodMatrix()Initializes a new instance of the Matrix class as the identity matrix.
Public methodMatrix(Rectangle, Point[])Initializes a new instance of the Matrix class to the geometric transform defined by the specified rectangle and array of points.
Public methodMatrix(RectangleF, PointF[])Initializes a new instance of the Matrix class to the geometric transform defined by the specified rectangle and array of points.
Public methodMatrix(Single, Single, Single, Single, Single, Single)Initializes a new instance of the Matrix class with the specified elements.
Top

  NameDescription
Public propertyElementsGets an array of floating-point values that represents the elements of this Matrix.
Public propertyIsIdentityGets a value indicating whether this Matrix is the identity matrix.
Public propertyIsInvertibleGets a value indicating whether this Matrix is invertible.
Public propertyOffsetXGets the x translation value (the dx value, or the element in the third row and first column) of this Matrix.
Public propertyOffsetYGets the y translation value (the dy value, or the element in the third row and second column) of this Matrix.
Top

  NameDescription
Public methodCloneCreates an exact copy of this Matrix.
Public methodCreateObjRefCreates an object that contains all the relevant information required to generate a proxy used to communicate with a remote object. (Inherited from MarshalByRefObject.)
Public methodDisposeReleases all resources used by this Matrix.
Public methodEqualsTests whether the specified object is a Matrix and is identical to this Matrix. (Overrides Object.Equals(Object).)
Public methodGetHashCodeReturns a hash code. (Overrides Object.GetHashCode().)
Public methodGetLifetimeServiceRetrieves the current lifetime service object that controls the lifetime policy for this instance. (Inherited from MarshalByRefObject.)
Public methodGetTypeGets the Type of the current instance. (Inherited from Object.)
Public methodInitializeLifetimeServiceObtains a lifetime service object to control the lifetime policy for this instance. (Inherited from MarshalByRefObject.)
Public methodInvertInverts this Matrix, if it is invertible.
Public methodMultiply(Matrix)Multiplies this Matrix by the matrix specified in the matrix parameter, by prepending the specified Matrix.
Public methodMultiply(Matrix, MatrixOrder)Multiplies this Matrix by the matrix specified in the matrix parameter, and in the order specified in the order parameter.
Public methodResetResets this Matrix to have the elements of the identity matrix.
Public methodRotate(Single)Prepend to this Matrix a clockwise rotation, around the origin and by the specified angle.
Public methodRotate(Single, MatrixOrder)Applies a clockwise rotation of an amount specified in the angle parameter, around the origin (zero x and y coordinates) for this Matrix.
Public methodRotateAt(Single, PointF)Applies a clockwise rotation to this Matrix around the point specified in the point parameter, and by prepending the rotation.
Public methodRotateAt(Single, PointF, MatrixOrder)Applies a clockwise rotation about the specified point to this Matrix in the specified order.
Public methodScale(Single, Single)Applies the specified scale vector to this Matrix by prepending the scale vector.
Public methodScale(Single, Single, MatrixOrder)Applies the specified scale vector (scaleX and scaleY) to this Matrix using the specified order.
Public methodShear(Single, Single)Applies the specified shear vector to this Matrix by prepending the shear transformation.
Public methodShear(Single, Single, MatrixOrder)Applies the specified shear vector to this Matrix in the specified order.
Public methodToStringReturns a string that represents the current object. (Inherited from Object.)
Public methodTransformPoints(Point[])Applies the geometric transform represented by this Matrix to a specified array of points.
Public methodTransformPoints(PointF[])Applies the geometric transform represented by this Matrix to a specified array of points.
Public methodTransformVectors(Point[])Applies only the scale and rotate components of this Matrix to the specified array of points.
Public methodTransformVectors(PointF[])Multiplies each vector in an array by the matrix. The translation elements of this matrix (third row) are ignored.
Public methodTranslate(Single, Single)Applies the specified translation vector (offsetX and offsetY) to this Matrix by prepending the translation vector.
Public methodTranslate(Single, Single, MatrixOrder)Applies the specified translation vector to this Matrix in the specified order.
Public methodVectorTransformPointsMultiplies each vector in an array by the matrix. The translation elements of this matrix (third row) are ignored.
Top

In GDI+ you can store an affine transformation in a Matrix object. Because the third column of a matrix that represents an affine transformation is always (0, 0, 1), you specify only the six numbers in the first two columns when you construct a Matrix object. The statement Matrix myMatrix = new Matrix(0, 1, -1, 0, 3, 4) constructs the matrix shown in the following figure.

Transformations

Composite Transformations

A composite transformation is a sequence of transformations, one followed by the other. Consider the matrices and transformations in the following list:

Matrix A

Rotate 90 degrees

Matrix B

Scale by a factor of 2 in the x direction

Matrix C

Translate 3 units in the y direction

If we start with the point (2, 1) — represented by the matrix [2 1 1] — and multiply by A, then B, then C, the point (2, 1) will undergo the three transformations in the order listed.

[2 1 1]ABC = [-2 5 1]

Rather than store the three parts of the composite transformation in three separate matrices, you can multiply A, B, and C together to get a single 3×3 matrix that stores the entire composite transformation. Suppose ABC = D. Then a point multiplied by D gives the same result as a point multiplied by A, then B, then C.

[2 1 1]D = [-2 5 1]

The following illustration shows the matrices A, B, C, and D.

Transformations

The fact that the matrix of a composite transformation can be formed by multiplying the individual transformation matrices means that any sequence of affine transformations can be stored in a single Matrix object.

Caution noteCaution

The order of a composite transformation is important. In general, rotate, then scale, then translate is not the same as scale, then rotate, then translate. Similarly, the order of matrix multiplication is important. In general, ABC is not the same as BAC.

The Matrix class provides several methods for building a composite transformation: Multiply, Rotate, RotateAt, Scale, Shear, and Translate. The following example creates the matrix of a composite transformation that first rotates 30 degrees, then scales by a factor of 2 in the y direction, and then translates 5 units in the x direction:

Matrix myMatrix = new Matrix();
myMatrix.Rotate(30);
myMatrix.Scale(1, 2, MatrixOrder.Append);
myMatrix.Translate(5, 0, MatrixOrder.Append);

.NET Framework

Supported in: 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Supported in: 4, 3.5 SP1

Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core Role not supported), Windows Server 2008 R2 (Server Core Role supported with SP1 or later; Itanium not supported)

The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.

Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.
Was this page helpful?
(1500 characters remaining)
Thank you for your feedback
Show:
© 2014 Microsoft