Beispiel #1
0
        // Allocate conversion state structures and make look_up tables for
        // the Yr,Yb,Yg <=> r,g,b conversions.
        public static int TIFFCIELabToRGBInit(TIFFCIELabToRGB cielab, TIFFDisplay display, double[] refWhite)
        {
            cielab.range = TIFFCIELabToRGB.CIELABTORGB_TABLE_RANGE;

            cielab.display.CopyTo(display);

            cielab.rstep = (cielab.display.d_YCR - cielab.display.d_Y0R) / cielab.range;
            cielab.gstep = (cielab.display.d_YCG - cielab.display.d_Y0G) / cielab.range;
            cielab.bstep = (cielab.display.d_YCB - cielab.display.d_Y0B) / cielab.range;

            double gammaR = 1.0 / cielab.display.d_gammaR;
            double gammaG = 1.0 / cielab.display.d_gammaG;
            double gammaB = 1.0 / cielab.display.d_gammaB;

            for (int i = 0; i <= cielab.range; i++)
            {
                double v = (double)i / cielab.range;
                cielab.Yr2r[i] = cielab.display.d_Vrwr * ((float)Math.Pow(v, gammaR));
                cielab.Yg2g[i] = cielab.display.d_Vrwg * ((float)Math.Pow(v, gammaG));
                cielab.Yb2b[i] = cielab.display.d_Vrwb * ((float)Math.Pow(v, gammaB));
            }

            // Init reference white point
            cielab.X0 = (float)refWhite[0];
            cielab.Y0 = (float)refWhite[1];
            cielab.Z0 = (float)refWhite[2];

            return(0);
        }
Beispiel #2
0
        // Allocate conversion state structures and make look_up tables for
        // the Yr,Yb,Yg <=> r,g,b conversions.
        public static int TIFFCIELabToRGBInit(TIFFCIELabToRGB cielab, TIFFDisplay display, double[] refWhite)
        {
            cielab.range=TIFFCIELabToRGB.CIELABTORGB_TABLE_RANGE;

            cielab.display.CopyTo(display);

            cielab.rstep=(cielab.display.d_YCR-cielab.display.d_Y0R)/cielab.range;
            cielab.gstep=(cielab.display.d_YCG-cielab.display.d_Y0G)/cielab.range;
            cielab.bstep=(cielab.display.d_YCB-cielab.display.d_Y0B)/cielab.range;

            double gammaR=1.0/cielab.display.d_gammaR;
            double gammaG=1.0/cielab.display.d_gammaG;
            double gammaB=1.0/cielab.display.d_gammaB;

            for(int i=0; i<=cielab.range; i++)
            {
                double v=(double)i/cielab.range;
                cielab.Yr2r[i]=cielab.display.d_Vrwr*((float)Math.Pow(v, gammaR));
                cielab.Yg2g[i]=cielab.display.d_Vrwg*((float)Math.Pow(v, gammaG));
                cielab.Yb2b[i]=cielab.display.d_Vrwb*((float)Math.Pow(v, gammaB));
            }

            // Init reference white point
            cielab.X0=(float)refWhite[0];
            cielab.Y0=(float)refWhite[1];
            cielab.Z0=(float)refWhite[2];

            return 0;
        }
Beispiel #3
0
 public void CopyTo(TIFFDisplay t)
 {
     t.d_mat[0, 0] = d_mat[0, 0];
     t.d_mat[0, 1] = d_mat[0, 1];
     t.d_mat[0, 2] = d_mat[0, 2];
     t.d_mat[1, 0] = d_mat[1, 0];
     t.d_mat[1, 1] = d_mat[1, 1];
     t.d_mat[1, 2] = d_mat[1, 2];
     t.d_mat[2, 0] = d_mat[2, 0];
     t.d_mat[2, 1] = d_mat[2, 1];
     t.d_mat[2, 2] = d_mat[2, 2];
     t.d_YCR       = d_YCR;
     t.d_YCG       = d_YCG;
     t.d_YCB       = d_YCB;
     t.d_Vrwr      = d_Vrwr;
     t.d_Vrwg      = d_Vrwg;
     t.d_Vrwb      = d_Vrwb;
     t.d_Y0R       = d_Y0R;
     t.d_Y0G       = d_Y0G;
     t.d_Y0B       = d_Y0B;
     t.d_gammaR    = d_gammaR;
     t.d_gammaG    = d_gammaG;
     t.d_gammaB    = d_gammaB;
 }
Beispiel #4
0
 public void CopyTo(TIFFDisplay t)
 {
     t.d_mat[0, 0]=d_mat[0, 0];
     t.d_mat[0, 1]=d_mat[0, 1];
     t.d_mat[0, 2]=d_mat[0, 2];
     t.d_mat[1, 0]=d_mat[1, 0];
     t.d_mat[1, 1]=d_mat[1, 1];
     t.d_mat[1, 2]=d_mat[1, 2];
     t.d_mat[2, 0]=d_mat[2, 0];
     t.d_mat[2, 1]=d_mat[2, 1];
     t.d_mat[2, 2]=d_mat[2, 2];
     t.d_YCR=d_YCR;
     t.d_YCG=d_YCG;
     t.d_YCB=d_YCB;
     t.d_Vrwr=d_Vrwr;
     t.d_Vrwg=d_Vrwg;
     t.d_Vrwb=d_Vrwb;
     t.d_Y0R=d_Y0R;
     t.d_Y0G=d_Y0G;
     t.d_Y0B=d_Y0B;
     t.d_gammaR=d_gammaR;
     t.d_gammaG=d_gammaG;
     t.d_gammaB=d_gammaB;
 }