Пример #1
0
        private static Color? GetColor(double main, double x, double y)
        {
            ColorVector color = new ColorVector(x, main, y);

            color.ConvertXyzToLinearSRgb();

            if (color.IsCanonical())
            {
                color.ConvertLinearSRgbToSRgb();

                return color.ToColor();
            }
            else
            {
                return null;
            }
        }
Пример #2
0
        private static Color? GetColor(double saturation, double hue, double bigY)
        {
            double angle = 2.0 * Math.PI * hue;
            double scale = bigY / (double)WhitePoints.D65Y;
            double d65BigX = (double)WhitePoints.D65X * scale;
            double d65BigZ = (double)WhitePoints.D65Z * scale;

            ColorVector color = new ColorVector(d65BigX + saturation * Math.Cos(angle), bigY, d65BigZ + saturation * Math.Sin(angle));

            color.ConvertXyzToLinearSRgb();

            if (color.IsCanonical())
            {
                color.ConvertLinearSRgbToSRgb();

                return color.ToColor();
            }
            else
            {
                return null;
            }
        }
Пример #3
0
        private static void Generate(IReadOnlyList<ColorVector> colors, double scaleY)
        {
            BitmapGenerator.Generate($@"E:\Rainbows\{scaleY:0.0000}", "rainbow-{0:0.000}.png", 101, colors.Count, 16, (double main, int x, int y) =>
            {
                main = 0.14 + main / 100;

                ColorVector color = colors[x];

                color.Component1 *= scaleY;
                color.Component2 *= scaleY;
                color.Component3 *= scaleY;

                ColorVector gray = new ColorVector((double)WhitePoints.D65X, (double)WhitePoints.D65Y, color.Component2);

                gray.ConvertXyyToXyz();

                double offsetX = color.Component1 - gray.Component1;
                double offsetZ = color.Component3 - gray.Component3;

                color.Component1 = gray.Component1 + main * offsetX;
                color.Component3 = gray.Component3 + main * offsetZ;

                color.ConvertXyzToLinearSRgb();

                if (color.IsCanonical())
                {
                    color.ConvertLinearSRgbToSRgb();

                    return color.ToColor();
                }
                else
                {
                    return null;
                }
            });
        }