public RGBColorSystem(
            float[,] rgbToXyzMatrix, float[,] xyzToRgbMatrix,
            StandardReferenceWhite referenceWhite,
            ColorCompandingFunction compandingFunction, float gamma = 0)
        {
            MathUtils.EnsureMatrix3AndInvese(rgbToXyzMatrix, xyzToRgbMatrix, out _rgbToXyzMatrix, out _xyzToRgbMatrix);

            _referenceWhite     = referenceWhite;
            _compandingFunction = compandingFunction;
            _gamma = gamma;
        }
        public static float[] GetStandardReferenceWhiteXYZ(StandardReferenceWhite referenceWhite)
        {
            switch (referenceWhite)
            {
            case StandardReferenceWhite.A:
                return(ReferenceWhite_XYZ_A);

            case StandardReferenceWhite.B:
                return(ReferenceWhite_XYZ_B);

            case StandardReferenceWhite.C:
                return(ReferenceWhite_XYZ_C);

            case StandardReferenceWhite.D50:
                return(ReferenceWhite_XYZ_D50);

            case StandardReferenceWhite.D55:
                return(ReferenceWhite_XYZ_D55);

            case StandardReferenceWhite.D65:
                return(ReferenceWhite_XYZ_D65);

            case StandardReferenceWhite.D75:
                return(ReferenceWhite_XYZ_D75);

            case StandardReferenceWhite.E:
                return(ReferenceWhite_XYZ_E);

            case StandardReferenceWhite.F2:
                return(ReferenceWhite_XYZ_F2);

            case StandardReferenceWhite.F7:
                return(ReferenceWhite_XYZ_F7);

            case StandardReferenceWhite.F11:
                return(ReferenceWhite_XYZ_F11);

            default:
                throw new ArgumentException("Illegal reference white");
            }
        }