ColorMatrix Class
Definition
Important
Some information relates to prerelease product that may be substantially modified before it’s released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
Defines a 5 x 5 matrix that contains the coordinates for the RGBAW space. Several methods of the ImageAttributes class adjust image colors by using a color matrix. This class cannot be inherited.
public ref class ColorMatrix sealed
public sealed class ColorMatrix
type ColorMatrix = class
Public NotInheritable Class ColorMatrix
- Inheritance
-
ColorMatrix
Examples
The following example takes an image that is all one color (0.2, 0.0, 0.4, 1.0) and applies the transformation described in the preceding paragraphs.
The following illustration shows the original image on the left and the transformed image on the right.
The code in the following example uses the following steps to perform the recoloring:
Initialize a ColorMatrix object.
Create an ImageAttributes object and pass the ColorMatrix object to the SetColorMatrix method of the ImageAttributes object.
Pass the ImageAttributes object to the DrawImage method of a Graphics object.
The preceding example is designed for use with Windows Forms, and it requires PaintEventArgs e
, which is a parameter of the Paint event handler
Image image = new Bitmap("InputColor.bmp");
ImageAttributes imageAttributes = new ImageAttributes();
int width = image.Width;
int height = image.Height;
float[][] colorMatrixElements = {
new float[] {2, 0, 0, 0, 0}, // red scaling factor of 2
new float[] {0, 1, 0, 0, 0}, // green scaling factor of 1
new float[] {0, 0, 1, 0, 0}, // blue scaling factor of 1
new float[] {0, 0, 0, 1, 0}, // alpha scaling factor of 1
new float[] {.2f, .2f, .2f, 0, 1}}; // three translations of 0.2
ColorMatrix colorMatrix = new ColorMatrix(colorMatrixElements);
imageAttributes.SetColorMatrix(
colorMatrix,
ColorMatrixFlag.Default,
ColorAdjustType.Bitmap);
e.Graphics.DrawImage(image, 10, 10);
e.Graphics.DrawImage(
image,
new Rectangle(120, 10, width, height), // destination rectangle
0, 0, // upper-left corner of source rectangle
width, // width of source rectangle
height, // height of source rectangle
GraphicsUnit.Pixel,
imageAttributes);
Dim image As New Bitmap("InputColor.bmp")
Dim imageAttributes As New ImageAttributes()
Dim width As Integer = image.Width
Dim height As Integer = image.Height
' The following matrix consists of the following transformations:
' red scaling factor of 2
' green scaling factor of 1
' blue scaling factor of 1
' alpha scaling factor of 1
' three translations of 0.2
Dim colorMatrixElements As Single()() = { _
New Single() {2, 0, 0, 0, 0}, _
New Single() {0, 1, 0, 0, 0}, _
New Single() {0, 0, 1, 0, 0}, _
New Single() {0, 0, 0, 1, 0}, _
New Single() {0.2F, 0.2F, 0.2F, 0, 1}}
Dim colorMatrix As New ColorMatrix(colorMatrixElements)
imageAttributes.SetColorMatrix(colorMatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap)
e.Graphics.DrawImage(image, 10, 10)
e.Graphics.DrawImage( _
image, _
New Rectangle(120, 10, width, height), _
0, _
0, _
width, _
height, _
GraphicsUnit.Pixel, _
imageAttributes)
Remarks
The matrix coefficients constitute a 5 x 5 linear transformation that is used for transforming ARGB homogeneous values. For example, an ARGB vector is represented as red, green, blue, alpha and w, where w is always 1.
For example, suppose you want to start with the color (0.2, 0.0, 0.4, 1.0) and apply the following transformations:
Double the red component
Add 0.2 to the red, green, and blue components
The following matrix multiplication will perform the pair of transformations in the order listed.
The elements of a color matrix are indexed (zero-based) by row and then column. For example, the entry in the fifth row and third column of matrix M is denoted by M[4][2].
The 5×5 identity matrix (shown in the following illustration) has 1s on the diagonal and 0s everywhere else. If you multiply a color vector by the identity matrix, the color vector does not change. A convenient way to form the matrix of a color transformation is to start with the identity matrix and make a small change that produces the desired transformation.
For a more detailed discussion of matrices and transformations, see Coordinate Systems and Transformations.
Constructors
ColorMatrix() |
Initializes a new instance of the ColorMatrix class. |
ColorMatrix(ReadOnlySpan<Single>) | |
ColorMatrix(Single[][]) |
Initializes a new instance of the ColorMatrix class using the elements in the specified matrix |
Properties
Item[Int32, Int32] |
Gets or sets the element at the specified row and column in the ColorMatrix. |
Matrix00 |
Gets or sets the element at the 0 (zero) row and 0 column of this ColorMatrix. |
Matrix01 |
Gets or sets the element at the 0 (zero) row and first column of this ColorMatrix. |
Matrix02 |
Gets or sets the element at the 0 (zero) row and second column of this ColorMatrix. |
Matrix03 |
Gets or sets the element at the 0 (zero) row and third column of this ColorMatrix. Represents the alpha component. |
Matrix04 |
Gets or sets the element at the 0 (zero) row and fourth column of this ColorMatrix. |
Matrix10 |
Gets or sets the element at the first row and 0 (zero) column of this ColorMatrix. |
Matrix11 |
Gets or sets the element at the first row and first column of this ColorMatrix. |
Matrix12 |
Gets or sets the element at the first row and second column of this ColorMatrix. |
Matrix13 |
Gets or sets the element at the first row and third column of this ColorMatrix. Represents the alpha component. |
Matrix14 |
Gets or sets the element at the first row and fourth column of this ColorMatrix. |
Matrix20 |
Gets or sets the element at the second row and 0 (zero) column of this ColorMatrix. |
Matrix21 |
Gets or sets the element at the second row and first column of this ColorMatrix. |
Matrix22 |
Gets or sets the element at the second row and second column of this ColorMatrix. |
Matrix23 |
Gets or sets the element at the second row and third column of this ColorMatrix. |
Matrix24 |
Gets or sets the element at the second row and fourth column of this ColorMatrix. |
Matrix30 |
Gets or sets the element at the third row and 0 (zero) column of this ColorMatrix. |
Matrix31 |
Gets or sets the element at the third row and first column of this ColorMatrix. |
Matrix32 |
Gets or sets the element at the third row and second column of this ColorMatrix. |
Matrix33 |
Gets or sets the element at the third row and third column of this ColorMatrix. Represents the alpha component. |
Matrix34 |
Gets or sets the element at the third row and fourth column of this ColorMatrix. |
Matrix40 |
Gets or sets the element at the fourth row and 0 (zero) column of this ColorMatrix. |
Matrix41 |
Gets or sets the element at the fourth row and first column of this ColorMatrix. |
Matrix42 |
Gets or sets the element at the fourth row and second column of this ColorMatrix. |
Matrix43 |
Gets or sets the element at the fourth row and third column of this ColorMatrix. Represents the alpha component. |
Matrix44 |
Gets or sets the element at the fourth row and fourth column of this ColorMatrix. |
Methods
Equals(Object) |
Determines whether the specified object is equal to the current object. (Inherited from Object) |
GetHashCode() |
Serves as the default hash function. (Inherited from Object) |
GetType() |
Gets the Type of the current instance. (Inherited from Object) |
MemberwiseClone() |
Creates a shallow copy of the current Object. (Inherited from Object) |
ToString() |
Returns a string that represents the current object. (Inherited from Object) |