PeachDrawing.Core
PeachDrawing.Core.ColorMatrix
ColorMatrix.IsChannelIndependent Property
Whether every output channel among R, G, B depends on only its own matching input channel
(i.e. Linear has no off-diagonal coupling among the R/G/B/A inputs feeding the
R/G/B outputs) - the exact condition under which this matrix is representable as a PDF
ExtGState /TR transfer function (see the type-level remarks). Input alpha’s
contribution to each of the R/G/B outputs is included in the check: a filter whose R/G/B
output depends on input alpha could not be expressed as a transfer function either, since
/TR only ever sees one color component’s own value, never alpha. The matrix’s own
alpha OUTPUT (column 4 - System.Numerics.Matrix4x4.M14/System.Numerics.Matrix4x4.M24/
System.Numerics.Matrix4x4.M34/System.Numerics.Matrix4x4.M44) is not checked - /TR is a
color-space transfer function and is never applied to alpha, so nothing about how this matrix
would compute alpha bears on whether it fits. See Linear’s remarks for why the
row is the input component and the column is the output component here.
public bool IsChannelIndependent { get; }