ColorFilter.matrix constructor

const ColorFilter.matrix(
  1. List<double> matrix
)

Construct a color filter from a 4x5 row-major matrix. The matrix is interpreted as a 5x5 matrix, where the fifth row is the identity configuration.

Every pixel's color value, represented as an [R, G, B, A], is matrix multiplied to create a new color:

| R' |   | a00 a01 a02 a03 a04 |   | R |
| G' |   | a10 a11 a12 a13 a14 |   | G |
| B' | = | a20 a21 a22 a23 a24 | * | B |
| A' |   | a30 a31 a32 a33 a34 |   | A |
| 1  |   |  0   0   0   0   1  |   | 1 |

The matrix is in row-major order and the translation column is specified in unnormalized, 0...255, space. For example, the identity matrix is:

const ColorFilter identity = ColorFilter.matrix(<double>[
  1, 0, 0, 0, 0,
  0, 1, 0, 0, 0,
  0, 0, 1, 0, 0,
  0, 0, 0, 1, 0,
]);

Examples

An inversion color matrix:

const ColorFilter invert = ColorFilter.matrix(<double>[
  -1,  0,  0, 0, 255,
   0, -1,  0, 0, 255,
   0,  0, -1, 0, 255,
   0,  0,  0, 1,   0,
]);

A sepia-toned color matrix (values based on the Filter Effects Spec):

const ColorFilter sepia = ColorFilter.matrix(<double>[
  0.393, 0.769, 0.189, 0, 0,
  0.349, 0.686, 0.168, 0, 0,
  0.272, 0.534, 0.131, 0, 0,
  0,     0,     0,     1, 0,
]);

A greyscale color filter (values based on the Filter Effects Spec):

const ColorFilter greyscale = ColorFilter.matrix(<double>[
  0.2126, 0.7152, 0.0722, 0, 0,
  0.2126, 0.7152, 0.0722, 0, 0,
  0.2126, 0.7152, 0.0722, 0, 0,
  0,      0,      0,      1, 0,
]);

Implementation

const ColorFilter.matrix(List<double> matrix)
    : _color = null,
      _blendMode = null,
      _matrix = matrix,
      _type = _kTypeMatrix;