private double[] GetValue_M_Matrix_B(double[] inColor)
        {
            //M Curves
            double[] m = new double[InputChannelCount];
            for (int i = 0; i < InputChannelCount; i++)
            {
                if (CurveM[i].Signature == TypeSignature.curve)
                {
                    m[i] = ((CurveTag)CurveM[i]).GetValue(inColor[i]);
                }
                else if (CurveM[i].Signature == TypeSignature.parametricCurve)
                {
                    m[i] = ((ParametricCurveTag)CurveM[i]).Curve.Function(inColor[i]);
                }
                else
                {
                    return(null);
                }
            }

            //Matrix
            double[] t = MathsProcess.MatixMultiply(Matrix3x3, m);

            //B Curves
            double[] output = new double[OutputChannelCount];
            for (int i = 0; i < OutputChannelCount; i++)
            {
                if (CurveB[i].Signature == TypeSignature.curve)
                {
                    output[i] = ((CurveTag)CurveB[i]).GetValue(t[i]);
                }
                else if (CurveB[i].Signature == TypeSignature.parametricCurve)
                {
                    output[i] = ((ParametricCurveTag)CurveB[i]).Curve.Function(t[i]);
                }
                else
                {
                    return(null);
                }
            }
            return(output);
        }
Example #2
0
 public override double[] GetValue(double[] inColor) => MathsProcess.MatrixAdd(MathsProcess.MatixMultiply(MatrixIxO, inColor), MatrixOx1);