Beispiel #1
0
        public Color2 ConvertToRgb(Info info)
        {
            int r, g, b;

            r = (byte)Common.Clamp(info.a + 128, 0, 255);
            g = (byte)Common.Clamp(info.b + 128, 0, 255);
            b = (byte)Common.Clamp(info.c + 128, 0, 255);

            return new Color2() { a = 255, r = (byte)r, g = (byte)g, b = (byte)b };
        }
Beispiel #2
0
        public Color2 ConvertToRgb(Info info)
        {
            byte r, g, b;
            float y  = info.a + 128;
            float cb = info.b;
            float cr = info.c;

            r = (byte)Common.Clamp(y                        + cr * mYcbcrRgb[0, 2], 0, 255);
            g = (byte)Common.Clamp(y + cb * mYcbcrRgb[1, 1] + cr * mYcbcrRgb[1, 2], 0, 255);
            b = (byte)Common.Clamp(y + cb * mYcbcrRgb[2, 1]                       , 0, 255);

            return new Color2() { a = 255, r = r, g = g, b = b };
        }
Beispiel #3
0
        internal Info LabToXyz(Info lab)
        {
            Info xyz;

            float fy = (((lab.a + 128f) / 2.55f) + 16f) / 116f;
            float fx = lab.b / 500f + fy;
            float fz = fy - lab.c / 200f;

            xyz.a = CreoQueSeQueHace(fx) * D65.x;
            xyz.b = CreoQueSeQueHace(fy) * D65.y;
            xyz.c = CreoQueSeQueHace(fz) * D65.z;

            return xyz;
        }
Beispiel #4
0
        internal Info XyzToLab(Info xyz, bool clamp = false)
        {
            Info lab;

            // Usando D65
            float fx = NoSeQueHace(xyz.a / D65.x);
            float fy = NoSeQueHace(xyz.b / D65.y);
            float fz = NoSeQueHace(xyz.c / D65.z);

            lab.a = (116f * fy - 16f) * 2.55f - 128f;
            lab.b = 500f * (fx - fy);
            lab.c = 200f * (fy - fz);

            if (clamp)
            {
                lab.a = Common.Clamp(lab.a, -128f, 127f);
                lab.b = Common.Clamp(lab.b, -128f, 127f);
                lab.c = Common.Clamp(lab.c, -128f, 127f);
            }

            return lab;
        }
Beispiel #5
0
 public Color2 ConvertToRgb(Info info)
 {
     info = LabToXyz(info);
     return XyzToRgb(info);
 }
Beispiel #6
0
        internal Color2 XyzToRgb(Info xyz)
        {
            float r, g, b;
            int ir, ig, ib;

            r = xyz.a * mXyzsRgb[0, 0] + xyz.b * mXyzsRgb[0, 1] + xyz.c * mXyzsRgb[0, 2];
            g = xyz.a * mXyzsRgb[1, 0] + xyz.b * mXyzsRgb[1, 1] + xyz.c * mXyzsRgb[1, 2];
            b = xyz.a * mXyzsRgb[2, 0] + xyz.b * mXyzsRgb[2, 1] + xyz.c * mXyzsRgb[2, 2];

            ir = GetRgbColor(r);
            ig = GetRgbColor(g);
            ib = GetRgbColor(b);

            return new Color2() { a = 255, r = (byte)ir, g = (byte)ig, b = (byte)ib };
        }
Beispiel #7
0
        public Info ConvertFromRgb(Color2 rgb)
        {
            Info info = RgbToXyz(rgb);

            return(XyzToLab(info));
        }
Beispiel #8
0
 public Color2 ConvertToRgb(Info info)
 {
     info = LabToXyz(info);
     return(XyzToRgb(info));
 }