Beispiel #1
0
 public static void CheckRgbInRange(double a, double r, double g, double b)
 {
     ColorConversionUtils.CheckRange_0_1(a, typeof(ColorRgb), "A");
     ColorConversionUtils.CheckRange_0_1(r, typeof(ColorRgb), "R");
     ColorConversionUtils.CheckRange_0_1(g, typeof(ColorRgb), "G");
     ColorConversionUtils.CheckRange_0_1(b, typeof(ColorRgb), "B");
 }
Beispiel #2
0
 public static void CheckHSVInRange(double _a, double _h, double _s, double _v)
 {
     ColorConversionUtils.CheckRange_0_1(_a, typeof(ColorHsv), "A");
     ColorConversionUtils.CheckRange_0_1_NAN(_h, typeof(ColorHsv), "H");
     ColorConversionUtils.CheckRange_0_1_NAN(_s, typeof(ColorHsv), "S");
     ColorConversionUtils.CheckRange_0_1(_v, typeof(ColorHsv), "V");
     ColorConversionUtils.CheckCompatibleHS(_h, _s);
 }
Beispiel #3
0
 private static void check_cmyk(double a, double c, double m, double y, double k)
 {
     ColorConversionUtils.CheckRange_0_1(a, typeof(ColorCmyk), "A");
     ColorConversionUtils.CheckRange_0_1(c, typeof(ColorCmyk), "C");
     ColorConversionUtils.CheckRange_0_1(m, typeof(ColorCmyk), "M");
     ColorConversionUtils.CheckRange_0_1(y, typeof(ColorCmyk), "Y");
     ColorConversionUtils.CheckRange_0_1(k, typeof(ColorCmyk), "K");
 }
Beispiel #4
0
        public ColorHsl Add(double h, double s, double l)
        {
            double newH = ColorConversionUtils.NormalizeHue(this._h + h);
            double newS = ColorConversionUtils.NormalizeSaturation(this._s + s);
            double newL = ColorConversionUtils.NormalizeLightness(this._l + l);

            return(new ColorHsl(newH, newS, newL));
        }
Beispiel #5
0
 private static void check_lab(double alpha, double l, double a, double b)
 {
     ColorConversionUtils.CheckRange_0_1(alpha, typeof(ColorCmyk), "Alpha");
     //TODO: Add range checking for x,y,z
     //ColorUtil.CheckRange_0_1(x, typeof(ColorCMYK), "X");
     //ColorUtil.CheckRange_0_1(y, typeof(ColorCMYK), "Y");
     //ColorUtil.CheckRange_0_1(z, typeof(ColorCMYK), "Z");
 }
Beispiel #6
0
 private static void check_xyz(double a, double x, double y, double z)
 {
     ColorConversionUtils.CheckRange_0_1(a, typeof(ColorCmyk), "A");
     //TODO: Add range checking for x,y,z
     //ColorUtil.CheckRange_0_1(x, typeof(ColorCMYK), "X");
     //ColorUtil.CheckRange_0_1(y, typeof(ColorCMYK), "Y");
     //ColorUtil.CheckRange_0_1(z, typeof(ColorCMYK), "Z");
 }
Beispiel #7
0
        public ColorHsl(ColorRgb rgb)
        {
            double maxc  = System.Math.Max(rgb.R, System.Math.Max(rgb.G, rgb.B));
            double minc  = System.Math.Min(rgb.R, System.Math.Min(rgb.G, rgb.B));
            double delta = maxc - minc;

            double l = (maxc + minc) / 2.0;
            double h = double.NaN;
            double s = double.NaN;

            // Handle case for r,g,b all have the same value
            if (maxc == minc)
            {
                // Black, White, or some shade of Gray -> No Chroma
                this._alpha = rgb.Alpha;
                this._h     = double.NaN;
                this._s     = double.NaN;
                this._l     = l;
                return;
            }

            // At this stage, we know R,G,B are not all set to the same value - i.e. there Chroma
            if (l < 0.5)
            {
                s = delta / (maxc + minc);
            }
            else
            {
                s = delta / (2.0 - maxc - minc);
            }

            double rc = (((maxc - rgb.R) / 6.0) + (delta / 2.0)) / delta;
            double gc = (((maxc - rgb.G) / 6.0) + (delta / 2.0)) / delta;
            double bc = (((maxc - rgb.B) / 6.0) + (delta / 2.0)) / delta;

            h = 0.0;

            if (rgb.R == maxc)
            {
                h = bc - gc;
            }
            else if (rgb.G == maxc)
            {
                h = (1.0 / 3.0) + rc - bc;
            }
            else if (rgb.B == maxc)
            {
                h = (2.0 / 3.0) + gc - rc;
            }

            h = ColorConversionUtils.NormalizeHue(h);

            this._alpha = rgb.Alpha;
            this._h     = h;
            this._s     = s;
            this._l     = l;
        }
Beispiel #8
0
        public ColorHsv(ColorRgb rgb)
        {
            double maxc = System.Math.Max(rgb.R, System.Math.Max(rgb.G, rgb.B));
            double minc = System.Math.Min(rgb.R, System.Math.Min(rgb.G, rgb.B));

            double h = double.NaN;
            double s = double.NaN;
            double v = double.NaN;

            // Handle case for r,g,b all have the same value
            if (maxc == minc)
            {
                // Black, White, or some shade of Gray -> No Chroma
                this._alpha = rgb.Alpha;
                this._h     = double.NaN;
                this._s     = double.NaN;
                this._v     = maxc;
                return;
            }

            // At this stage, we know R,G,B are not all set to the same value - i.e. there is Chromatic data
            double delta = maxc - minc;

            s = delta / maxc;
            v = maxc;

            if (rgb.R == maxc)
            {
                h = 0.0 + ((rgb.G - rgb.B) / delta);
            }
            else if (rgb.G == maxc)
            {
                h = 2.0 + ((rgb.B - rgb.R) / delta);
            }
            else
            {
                h = 4.0 + ((rgb.R - rgb.G) / delta);
            }

            h = ColorConversionUtils.NormalizeHue(h / 6.0);

            this._alpha = rgb.Alpha;
            this._h     = h;
            this._s     = s;
            this._v     = v;
        }
Beispiel #9
0
        private static double hue_2_rgb(double m1, double m2, double h)
        {
            h = ColorConversionUtils.NormalizeHue(h);

            if ((6.0 * h) < 1.0)
            {
                return(m1 + (m2 - m1) * 6.0 * h);
            }

            if ((2.0 * h) < 1.0)
            {
                return(m2);
            }

            if ((3.0 * h) < 2.0)
            {
                return(m1 + (m2 - m1) * ((2.0 / 3.0) - h) * 6.0);
            }

            return(m1);
        }