BitMiracle.LibTiff.Classic.Internal.TiffCIELabToRGB.XYZToRGB C# (CSharp) Method

XYZToRGB() public method

public XYZToRGB ( float X, float Y, float Z, int &r, int &g, int &b ) : void
X float
Y float
Z float
r int
g int
b int
return void
        public void XYZToRGB(float X, float Y, float Z, out int r, out int g, out int b)
        {
            /* Multiply through the matrix to get luminosity values. */
            float Yr = display.d_mat[0][0] * X + display.d_mat[0][1] * Y + display.d_mat[0][2] * Z;
            float Yg = display.d_mat[1][0] * X + display.d_mat[1][1] * Y + display.d_mat[1][2] * Z;
            float Yb = display.d_mat[2][0] * X + display.d_mat[2][1] * Y + display.d_mat[2][2] * Z;

            /* Clip input */
            Yr = Math.Max(Yr, display.d_Y0R);
            Yg = Math.Max(Yg, display.d_Y0G);
            Yb = Math.Max(Yb, display.d_Y0B);

            /* Avoid overflow in case of wrong input values */
            Yr = Math.Min(Yr, display.d_YCR);
            Yg = Math.Min(Yg, display.d_YCG);
            Yb = Math.Min(Yb, display.d_YCB);

            /* Turn luminosity to color value. */
            int i = (int)((Yr - display.d_Y0R) / rstep);
            i = Math.Min(range, i);
            r = rInt(Yr2r[i]);

            i = (int)((Yg - display.d_Y0G) / gstep);
            i = Math.Min(range, i);
            g = rInt(Yg2g[i]);

            i = (int)((Yb - display.d_Y0B) / bstep);
            i = Math.Min(range, i);
            b = rInt(Yb2b[i]);

            /* Clip output. */
            r = Math.Min(r, display.d_Vrwr);
            g = Math.Min(g, display.d_Vrwg);
            b = Math.Min(b, display.d_Vrwb);
        }