fCraft.Drawing.BlockPalette.RgbToLab C# (CSharp) Method

RgbToLab() static private method

static private RgbToLab ( System.Drawing.Color color, bool adjustContrast ) : LabColor
color System.Drawing.Color
adjustContrast bool
return LabColor
        static LabColor RgbToLab(RgbColor color, bool adjustContrast)
        {
            // RGB are assumed to be in [0...255] range
            double R = color.R/255d;
            double G = color.G/255d;
            double B = color.B/255d;

            // CIEXYZ coordinates are normalized to [0...1]
            double x = 0.4124564 * R + 0.3575761 * G + 0.1804375 * B;
            double y = 0.2126729 * R + 0.7151522 * G + 0.0721750 * B;
            double z = 0.0193339 * R + 0.1191920 * G + 0.9503041 * B;

            double xRatio = x/XN;
            double yRatio = y/YN;
            double zRatio = z/ZN;

            LabColor result = new LabColor {
                // L is normalized to [0...100]
                L = 116*XyzToLab( yRatio ) - 16,
                a = 500*(XyzToLab( xRatio ) - XyzToLab( yRatio )),
                b = 200*(XyzToLab( yRatio ) - XyzToLab( zRatio ))
            };
            if( adjustContrast ) {
                result.L *= .75;
            }
            return result;
        }