Exemple #1
0
        private void numericUpDown7_ValueChanged(object sender, EventArgs e)
        {
            if (_skipSet)
            {
                return;
            }

            System.Drawing.Color asRGB = System.Drawing.Color.FromArgb((int)numericUpDown5.Value, (int)numericUpDown6.Value,
                                                                       (int)numericUpDown7.Value);
            HSL hsl = ColorSpaceHelper.RGBtoHSL(asRGB);

            _skipSet = true;

            numericUpDown1.Value = (int)hsl.Hue;
            numericUpDown2.Value = (int)(hsl.Saturation * 240.0f);
            numericUpDown3.Value = (int)(hsl.Luminance * 240.0f);

            colorSquare1.CurrentHue      = (int)numericUpDown1.Value;
            colorSquare1.CurrentSat      = (int)numericUpDown2.Value;
            saturationSlider1.CurrentLum = (int)numericUpDown3.Value;
            saturationSlider1.Color      = new HSL(colorSquare1.CurrentHue, (double)colorSquare1.CurrentSat / 240.0f, 0);
            panel1.BackColor             = asRGB;

            _skipSet = false;
        }
        public override Color BlendColor(Color l, Color r)
        {
            bool ctrlIng     = (Control.ModifierKeys & Keys.Shift) != 0;
            bool switchTools = (!Editor.MainForm.DarkenLightenOptions.Inverted && ctrlIng) ||
                               (Editor.MainForm.DarkenLightenOptions.Inverted && !ctrlIng);
            HSL   hsl = ColorSpaceHelper.RGBtoHSL(r);
            float mod = l.A / 255.0f;

            if (switchTools)
            {
                hsl.Luminance -= (GlobalSettings.DarkenLightenExposure * mod) / 5.0f;
            }
            else
            {
                hsl.Luminance += (GlobalSettings.DarkenLightenExposure * mod) / 5.0f;
            }

            if (hsl.Luminance < 0)
            {
                hsl.Luminance = 0;
            }
            if (hsl.Luminance > 1)
            {
                hsl.Luminance = 1;
            }

            return(Color.FromArgb(r.A, ColorSpaceHelper.HSLtoColor(hsl)));
        }
Exemple #3
0
        protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaint(e);

            var borderThing = new Rectangle(0, 8, Width - 8, Height - 16);

            HSL half = Color;

            half.Luminance = 0.5f;
            ColorSpaceRenderer.GenerateColorSlider(e.Graphics, ColorSpaceHelper.HSLtoRGB(half).ToColor(), borderThing);

            ControlPaint.DrawBorder3D(e.Graphics, borderThing, Border3DStyle.SunkenOuter);

            float inc = (Height - 18) / 240.0f;

            float invLum = (240 - _curLum);

            e.Graphics.FillPolygon(Brushes.Black,
                                   new[]
            {
                new Point(Width - 7, 6 + (int)(invLum * inc) + 2),
                new Point(Width - 1, 12 + (int)(invLum * inc) + 2),
                new Point(Width - 1, 0 + (int)(invLum * inc) + 2),
            }
                                   );
        }
        public void ApplyChromaKey(KalikoImage image)
        {
            unsafe {
                var bitmapData = image.LockBits();

                var bytesPerPixel = Image.GetPixelFormatSize(bitmapData.PixelFormat) / 8;
                var height        = bitmapData.Height;
                var widthInBytes  = bitmapData.Width * bytesPerPixel;
                var startOffset   = (byte *)bitmapData.Scan0;

                var keyHsb = ColorSpaceHelper.RGBtoHSB(KeyColor);

                Parallel.For(0, height, y => {
                    var currentLine = startOffset + (y * bitmapData.Stride);
                    for (var x = 0; x < widthInBytes; x = x + bytesPerPixel)
                    {
                        var red   = currentLine[x];
                        var green = currentLine[x + 1];
                        var blue  = currentLine[x + 2];
                        var hsb   = ColorSpaceHelper.RGBtoHSB(red, green, blue);

                        if (Abs(hsb.Hue, keyHsb.Hue) < ToleranceHue && Abs(hsb.Saturation, keyHsb.Saturation) < ToleranceSaturnation && Abs(hsb.Brightness, keyHsb.Brightness) < ToleranceBrightness)
                        {
                            currentLine[x + 3] = 0;
                        }
                    }
                });

                image.UnlockBits(bitmapData);
            }
        }
Exemple #5
0
        public void ApplyChromaKey(KalikoImage image)
        {
            var pixels = image.IntArray;
            var keyHsb = ColorSpaceHelper.RGBtoHSB(KeyColor);

            for (int i = 0; i < pixels.Length; i++)
            {
                int rgb = pixels[i];

                int red   = (rgb >> 16) & 0xff;
                int green = (rgb >> 8) & 0xff;
                int blue  = rgb & 0xff;
                HSB hsb   = ColorSpaceHelper.RGBtoHSB(red, green, blue);

                if (Math.Abs(hsb.Hue - keyHsb.Hue) < ToleranceHue && Math.Abs(hsb.Saturation - keyHsb.Saturation) < ToleranceSaturnation && Math.Abs(hsb.Brightness - keyHsb.Brightness) < ToleranceBrightness)
                {
                    pixels[i] = rgb & 0xffffff;
                }
                else
                {
                    pixels[i] = rgb;
                }
            }

            image.IntArray = pixels;
        }
        private CIELab MapRawToCieLab(string rawData, string illuminantObserver)
        {
            var spectrumToXyzConverter = new SpectrumToXYZConverter();
            var xyzToLabConverter      = new ColorSpaceHelper(spectrumToXyzConverter);
            var spectrumToLabConverter = new SpectrumToLabConverter(spectrumToXyzConverter, xyzToLabConverter);
            var coordinateMapper       = new ColorCalculation.CoordinateMapper(spectrumToLabConverter);

            return(coordinateMapper.MapRawToCieLab(rawData, illuminantObserver));
        }
Exemple #7
0
        internal void SetupFromBrush(XRadialGradientBrush brush, XGraphicsPdfRenderer renderer)
        {
            if (brush == null)
            {
                throw new ArgumentNullException("brush");
            }

            PdfColorMode colorMode = _document.Options.ColorMode;
            XColor       color1    = ColorSpaceHelper.EnsureColorMode(colorMode, brush._color1);
            XColor       color2    = ColorSpaceHelper.EnsureColorMode(colorMode, brush._color2);

            PdfDictionary function = new PdfDictionary();

            Elements[Keys.ShadingType] = new PdfInteger(3);
            if (colorMode != PdfColorMode.Cmyk)
            {
                Elements[Keys.ColorSpace] = new PdfName("/DeviceRGB");
            }
            else
            {
                Elements[Keys.ColorSpace] = new PdfName("/DeviceCMYK");
            }

            XPoint p1 = renderer.WorldToView(brush._center1);
            XPoint p2 = renderer.WorldToView(brush._center2);

            var rv1 = renderer.WorldToView(new XPoint(brush._r1 + brush._center1.X, brush._center1.Y));
            var rv2 = renderer.WorldToView(new XPoint(brush._r2 + brush._center2.X, brush._center2.Y));

            var dx1 = rv1.X - p1.X;
            var dy1 = rv1.Y - p1.Y;
            var dx2 = rv2.X - p2.X;
            var dy2 = rv2.Y - p2.Y;

            var r1 = Math.Sqrt(dx1 * dx1 + dy1 * dy1);
            var r2 = Math.Sqrt(dx2 * dx2 + dy2 * dy2);

            const string format = Config.SignificantFigures3;

            Elements[Keys.Coords] = new PdfLiteral("[{0:" + format + "} {1:" + format + "} {2:" + format + "} {3:" + format + "} {4:" + format + "} {5:" + format + "}]", p1.X, p1.Y, r1, p2.X, p2.Y, r2);

            //Elements[Keys.Background] = new PdfRawItem("[0 1 1]");
            //Elements[Keys.Domain] =
            Elements[Keys.Function] = function;
            //Elements[Keys.Extend] = new PdfRawItem("[true true]");

            string clr1 = "[" + PdfEncoders.ToString(color1, colorMode, true) + "]";
            string clr2 = "[" + PdfEncoders.ToString(color2, colorMode, true) + "]";

            function.Elements["/FunctionType"] = new PdfInteger(2);
            function.Elements["/C0"]           = new PdfLiteral(clr1);
            function.Elements["/C1"]           = new PdfLiteral(clr2);
            function.Elements["/Domain"]       = new PdfLiteral("[0 1]");
            function.Elements["/N"]            = new PdfInteger(1);
        }
Exemple #8
0
        public void Parse()
        {
            Assert.Equal(ColorSpace.sRGB, ColorSpaceHelper.Parse("sRgb"));
            Assert.Equal(ColorSpace.sRGB, ColorSpaceHelper.Parse("sRGB"));
            Assert.Equal(ColorSpace.AdobeRGB, ColorSpaceHelper.Parse("AdobeRgb"));

            Assert.Equal(ColorSpace.RGB, ColorSpaceHelper.Parse("RGB"));
            Assert.Equal(ColorSpace.RGB, ColorSpaceHelper.Parse("rgb"));
            Assert.Equal(ColorSpace.CMYK, ColorSpaceHelper.Parse("cmyk"));
            Assert.Equal(ColorSpace.Gray, ColorSpaceHelper.Parse("grayscale"));
        }
Exemple #9
0
        private void numericUpDown3_ValueChanged(object sender, EventArgs e)
        {
            if (_skipSet)
            {
                return;
            }

            saturationSlider1.CurrentLum = (int)numericUpDown3.Value;
            saturationSlider1.Color      = new HSL(colorSquare1.CurrentHue, (double)colorSquare1.CurrentSat / 240.0f, 0);
            panel1.BackColor             = ColorSpaceHelper.HSLtoRGB(MyHSL).ToColor();
        }
        public void RealizeBrush(XBrush brush, PdfColorMode colorMode)
        {
            if (brush is XSolidBrush)
            {
                XColor color = ((XSolidBrush)brush).Color;
                color = ColorSpaceHelper.EnsureColorMode(colorMode, color);

                if (colorMode != PdfColorMode.Cmyk)
                {
                    if (this.realizedFillColor.Rgb != color.Rgb)
                    {
                        this.renderer.Append(PdfEncoders.ToString(color, PdfColorMode.Rgb));
                        this.renderer.Append(" rg\n");
                    }
                }
                else
                {
                    if (!ColorSpaceHelper.IsEqualCmyk(this.realizedFillColor, color))
                    {
                        this.renderer.Append(PdfEncoders.ToString(color, PdfColorMode.Cmyk));
                        this.renderer.Append(" k\n");
                    }
                }

                if (this.renderer.Owner.Version >= 14 && this.realizedFillColor.A != color.A)
                {
                    PdfExtGState extGState = this.renderer.Owner.ExtGStateTable.GetExtGStateNonStroke(color.A);
                    string       gs        = this.renderer.Resources.AddExtGState(extGState);
                    this.renderer.AppendFormat("{0} gs\n", gs);

                    // Must create transparany group
                    if (this.renderer.page != null && color.A < 1)
                    {
                        this.renderer.page.transparencyUsed = true;
                    }
                }
                this.realizedFillColor = color;
            }
            else if (brush is XLinearGradientBrush)
            {
                XMatrix matrix = this.renderer.defaultViewMatrix;
                matrix.Prepend(this.Transform);
                PdfShadingPattern pattern = new PdfShadingPattern(this.renderer.Owner);
                pattern.SetupFromBrush((XLinearGradientBrush)brush, matrix);
                string name = this.renderer.Resources.AddPattern(pattern);
                this.renderer.AppendFormat("/Pattern cs\n", name);
                this.renderer.AppendFormat("{0} scn\n", name);

                // Invalidate fill color
                this.realizedFillColor = XColor.Empty;
            }
        }
Exemple #11
0
        private static Color ReadLABColor(EndianBinaryReader reader)
        {
            ushort x = reader.ReadUInt16();
            short  y = reader.ReadInt16();
            short  z = reader.ReadInt16();
            ushort w = reader.ReadUInt16();

            float La = x / 100.0f;
            float Aa = y / 100.0f;
            float Bb = z / 100.0f;

            return(ColorSpaceHelper.LabtoRGB(La, Aa, Bb).ToColor());
        }
Exemple #12
0
        private static Color ReadHSBColor(EndianBinaryReader reader)
        {
            ushort x = reader.ReadUInt16();
            ushort y = reader.ReadUInt16();
            ushort z = reader.ReadUInt16();

            reader.ReadUInt16();

            float h = x / 182.04f;
            float s = y / 655.35f;
            float b = z / 655.35f;

            return(ColorSpaceHelper.HSBtoColor(h, s, b));
        }
Exemple #13
0
        private static Color ReadCMYKColor(EndianBinaryReader reader)
        {
            ushort x = reader.ReadUInt16();
            ushort y = reader.ReadUInt16();
            ushort z = reader.ReadUInt16();
            ushort w = reader.ReadUInt16();

            float c  = (100 - (x / 655.35f)) / 100.0f;
            float m  = (100 - (y / 655.35f)) / 100.0f;
            float ye = (100 - (z / 655.35f)) / 100.0f;
            float k  = (100 - (w / 655.35f)) / 100.0f;

            return(ColorSpaceHelper.CMYKtoColor(c, m, ye, k));
        }
Exemple #14
0
        private void saturationSlider1_LumChanged(object sender, EventArgs e)
        {
            if (_skipSet)
            {
                return;
            }

            _skipSet             = true;
            numericUpDown3.Value = saturationSlider1.CurrentLum;

            panel1.BackColor = ColorSpaceHelper.HSLtoRGB(MyHSL).ToColor();
            SetColors();
            _skipSet = false;
        }
Exemple #15
0
        private void RealizeFillColor(XColor color, bool overPrint, PdfColorMode colorMode)
        {
            color = ColorSpaceHelper.EnsureColorMode(colorMode, color);

            switch (color.ColorSpace)
            {
            case XColorSpace.Rgb:
                if (_realizedFillColor.IsEmpty || _realizedFillColor.Rgb != color.Rgb)
                {
                    _renderer.Append(PdfEncoders.ToString(color, PdfColorMode.Rgb));
                    _renderer.Append(" rg\n");
                }
                break;

            case XColorSpace.Cmyk:
                if (_realizedFillColor.IsEmpty || !ColorSpaceHelper.IsEqualCmyk(_realizedFillColor, color))
                {
                    _renderer.Append(PdfEncoders.ToString(color, PdfColorMode.Cmyk));
                    _renderer.Append(" k\n");
                }
                break;

            case XColorSpace.GrayScale:
                if (_realizedFillColor.IsEmpty || _realizedFillColor.GS != color.GS)
                {
                    _renderer.Append(PdfEncoders.ToString(color, PdfColorMode.Undefined));
                    _renderer.Append(" g\n");
                }
                break;

            default:
                break;
            }

            if (_renderer.Owner.Version >= 14 && color.ColorSpace != XColorSpace.GrayScale && (_realizedFillColor.A != color.A || _realizedNonStrokeOverPrint != overPrint))
            {
                PdfExtGState extGState = _renderer.Owner.ExtGStateTable.GetExtGStateNonStroke(color.A, overPrint);
                string       gs        = _renderer.Resources.AddExtGState(extGState);
                _renderer.AppendFormatString("{0} gs\n", gs);

                // Must create transparency group.
                if (_renderer._page != null && color.A < 1)
                {
                    _renderer._page.TransparencyUsed = true;
                }
            }
            _realizedFillColor          = color;
            _realizedNonStrokeOverPrint = overPrint;
        }
Exemple #16
0
        private void colorSquare1_SatChanged(object sender, EventArgs e)
        {
            if (_skipSet)
            {
                return;
            }

            _skipSet             = true;
            numericUpDown2.Value = colorSquare1.CurrentSat;

            saturationSlider1.Color = new HSL(colorSquare1.CurrentHue, (double)colorSquare1.CurrentSat / 240.0f, 0);
            panel1.BackColor        = ColorSpaceHelper.HSLtoRGB(MyHSL).ToColor();
            SetColors();
            _skipSet = false;
        }
Exemple #17
0
        public static Bitmap GenerateColorSquare(int width, int height)
        {
            var colorSquare = new Bitmap(width, height);
            // START HUE DRAW
            Graphics g = Graphics.FromImage(colorSquare);

            //Set the hue shades with the correct saturation and luminance
            System.Drawing.Color[] theColors =
            {
                ColorSpaceHelper.HSLtoColor(new HSL(0,   1, 0.5f)),
                ColorSpaceHelper.HSLtoColor(new HSL(60,  1, 0.5f)),
                ColorSpaceHelper.HSLtoColor(new HSL(120, 1, 0.5f)),
                ColorSpaceHelper.HSLtoColor(new HSL(180, 1, 0.5f)),
                ColorSpaceHelper.HSLtoColor(new HSL(240, 1, 0.5f)),
                ColorSpaceHelper.HSLtoColor(new HSL(300, 1, 0.5f)),
                ColorSpaceHelper.HSLtoColor(new HSL(360, 1, 0.5f))
            };
            //Calculate positions
            float percent = 1.0f / 6;

            float[] thePositions = { 0.0f, percent, percent * 2, percent * 3, percent * 4, percent * 5, 1.0f };
            //Set blend
            var theBlend = new ColorBlend();

            theBlend.Colors    = theColors;
            theBlend.Positions = thePositions;
            //Get rectangle
            var colorRect = new Rectangle(0, 0, width, height);
            //Make the linear brush and assign the custom blend to it
            var theBrush = new LinearGradientBrush(colorRect,
                                                   System.Drawing.Color.Red,
                                                   System.Drawing.Color.Red, 0, false);

            theBrush.InterpolationColors = theBlend;
            //Draw rectangle
            g.FillRectangle(theBrush, colorRect);
            //END HUE
            //START SATURATION
            //--- 0% sat 50% lum = 128 r, g and b
            System.Drawing.Color halfSatColor        = System.Drawing.Color.FromArgb(128, 128, 128);
            System.Drawing.Color halfSatColorNoAlpha = System.Drawing.Color.FromArgb(0, 128, 128, 128);

            g.FillRectangle(new LinearGradientBrush(colorRect, halfSatColorNoAlpha, halfSatColor, 90, false), colorRect);
            //END SATURATION

            return(colorSquare);
        }
Exemple #18
0
        // ******************************************************************
        private bool IsFarEnoughFromExistingColor(Color c, double distanceMin)
        {
            foreach (ColorRatio coloRatio in UsedColors)
            {
                // double distance = ColorSpaceHelper.GetColorDistance(c, coloRatio.Color);

                // This is a lot better differences between color with CIELab calc.
                double distance = ColorSpaceHelper.GetColorDistanceCIELab(c, coloRatio.Color) / 100;

                if (distance / coloRatio.KeepAwayRatio < distanceMin)
                {
                    return(false);                    // Too close
                }
            }

            return(true);
        }
Exemple #19
0
        public override Color BlendColor(Color l, Color r)
        {
            Color c   = r;
            HSB   hsv = ColorSpaceHelper.RGBtoHSB(c);

            hsv.Brightness += (((IsPreview ? _noise : _noise2).NextDouble() - 0.5f) * 2) * GlobalSettings.NoiseSaturation;

            if (hsv.Brightness < 0)
            {
                hsv.Brightness = 0;
            }
            if (hsv.Brightness > 1)
            {
                hsv.Brightness = 1;
            }

            return(Color.FromArgb(r.A, ColorSpaceHelper.HSBtoColor(hsv)));
        }
        private void RealizeFillColor(XColor color, bool overPrint, PdfColorMode colorMode)
        {
            color = ColorSpaceHelper.EnsureColorMode(colorMode, color);

            if (colorMode != PdfColorMode.Cmyk)
            {
                if (_realizedFillColor.IsEmpty || _realizedFillColor.Rgb != color.Rgb)
                {
                    _renderer.Append(PdfEncoders.ToString(color, PdfColorMode.Rgb));
                    _renderer.Append(" rg\n");
                }
            }
            else
            {
                Debug.Assert(colorMode == PdfColorMode.Cmyk);

                if (_realizedFillColor.IsEmpty || !ColorSpaceHelper.IsEqualCmyk(_realizedFillColor, color))
                {
                    _renderer.Append(PdfEncoders.ToString(color, PdfColorMode.Cmyk));
                    _renderer.Append(" k\n");
                }
            }

            if (_renderer.Owner.Version >= 14 && (_realizedFillColor.A != color.A || _realizedNonStrokeOverPrint != overPrint))
            {
                PdfExtGState extGState = _renderer.Owner.ExtGStateTable.GetExtGStateNonStroke(color.A, overPrint);
                string       gs        = _renderer.Resources.AddExtGState(extGState);
                _renderer.AppendFormatString("{0} gs\n", gs);

                // Must create transparency group.
                if (_renderer._page != null && color.A < 1)
                {
                    _renderer._page.TransparencyUsed = true;
                }
            }
            _realizedFillColor          = color;
            _realizedNonStrokeOverPrint = overPrint;
        }
        public void RealizePen(XPen pen, PdfColorMode colorMode)
        {
            const string frmt2     = Config.SignificantFigures2;
            const string format    = Config.SignificantFigures3;
            XColor       color     = pen.Color;
            bool         overPrint = pen.Overprint;

            color = ColorSpaceHelper.EnsureColorMode(colorMode, color);

            if (_realizedLineWith != pen._width)
            {
                _renderer.AppendFormatArgs("{0:" + format + "} w\n", pen._width);
                _realizedLineWith = pen._width;
            }

            if (_realizedLineCap != (int)pen._lineCap)
            {
                _renderer.AppendFormatArgs("{0} J\n", (int)pen._lineCap);
                _realizedLineCap = (int)pen._lineCap;
            }

            if (_realizedLineJoin != (int)pen._lineJoin)
            {
                _renderer.AppendFormatArgs("{0} j\n", (int)pen._lineJoin);
                _realizedLineJoin = (int)pen._lineJoin;
            }

            if (_realizedLineCap == (int)XLineJoin.Miter)
            {
                if (_realizedMiterLimit != (int)pen._miterLimit && (int)pen._miterLimit != 0)
                {
                    _renderer.AppendFormatInt("{0} M\n", (int)pen._miterLimit);
                    _realizedMiterLimit = (int)pen._miterLimit;
                }
            }

            if (_realizedDashStyle != pen._dashStyle || pen._dashStyle == XDashStyle.Custom)
            {
                double dot  = pen.Width;
                double dash = 3 * dot;

                // Line width 0 is not recommended but valid.
                XDashStyle dashStyle = pen.DashStyle;
                if (dot == 0)
                {
                    dashStyle = XDashStyle.Solid;
                }

                switch (dashStyle)
                {
                case XDashStyle.Solid:
                    _renderer.Append("[]0 d\n");
                    break;

                case XDashStyle.Dash:
                    _renderer.AppendFormatArgs("[{0:" + frmt2 + "} {1:" + frmt2 + "}]0 d\n", dash, dot);
                    break;

                case XDashStyle.Dot:
                    _renderer.AppendFormatArgs("[{0:" + frmt2 + "}]0 d\n", dot);
                    break;

                case XDashStyle.DashDot:
                    _renderer.AppendFormatArgs("[{0:" + frmt2 + "} {1:" + frmt2 + "} {1:" + frmt2 + "} {1:" + frmt2 + "}]0 d\n", dash, dot);
                    break;

                case XDashStyle.DashDotDot:
                    _renderer.AppendFormatArgs("[{0:" + frmt2 + "} {1:" + frmt2 + "} {1:" + frmt2 + "} {1:" + frmt2 + "} {1:" + frmt2 + "} {1:" + frmt2 + "}]0 d\n", dash, dot);
                    break;

                case XDashStyle.Custom:
                {
                    StringBuilder pdf = new StringBuilder("[", 256);
                    int           len = pen._dashPattern == null ? 0 : pen._dashPattern.Length;
                    for (int idx = 0; idx < len; idx++)
                    {
                        if (idx > 0)
                        {
                            pdf.Append(' ');
                        }
                        pdf.Append(PdfEncoders.ToString(pen._dashPattern[idx] * pen._width));
                    }
                    // Make an even number of values look like in GDI+
                    if (len > 0 && len % 2 == 1)
                    {
                        pdf.Append(' ');
                        pdf.Append(PdfEncoders.ToString(0.2 * pen._width));
                    }
                    pdf.AppendFormat(CultureInfo.InvariantCulture, "]{0:" + format + "} d\n", pen._dashOffset * pen._width);
                    string pattern = pdf.ToString();

                    // BUG: [email protected] reported a realizing problem
                    // HACK: I remove the if clause
                    //if (_realizedDashPattern != pattern)
                    {
                        _realizedDashPattern = pattern;
                        _renderer.Append(pattern);
                    }
                }
                break;
                }
                _realizedDashStyle = dashStyle;
            }

            if (colorMode != PdfColorMode.Cmyk)
            {
                if (_realizedStrokeColor.Rgb != color.Rgb)
                {
                    _renderer.Append(PdfEncoders.ToString(color, PdfColorMode.Rgb));
                    _renderer.Append(" RG\n");
                }
            }
            else
            {
                if (!ColorSpaceHelper.IsEqualCmyk(_realizedStrokeColor, color))
                {
                    _renderer.Append(PdfEncoders.ToString(color, PdfColorMode.Cmyk));
                    _renderer.Append(" K\n");
                }
            }

            if (_renderer.Owner.Version >= 14 && (_realizedStrokeColor.A != color.A || _realizedStrokeOverPrint != overPrint))
            {
                PdfExtGState extGState = _renderer.Owner.ExtGStateTable.GetExtGStateStroke(color.A, overPrint);
                string       gs        = _renderer.Resources.AddExtGState(extGState);
                _renderer.AppendFormatString("{0} gs\n", gs);

                // Must create transparency group.
                if (_renderer._page != null && color.A < 1)
                {
                    _renderer._page.TransparencyUsed = true;
                }
            }
            _realizedStrokeColor     = color;
            _realizedStrokeOverPrint = overPrint;
        }
Exemple #22
0
        public void RealizePen(XPen pen, PdfColorMode colorMode)
        {
            XColor color = pen.Color;

            color = ColorSpaceHelper.EnsureColorMode(colorMode, color);

            if (realizedLineWith != pen.width)
            {
                renderer.AppendFormat("{0:0.###} w\n", pen.width);
                realizedLineWith = pen.width;
            }

            if (realizedLineCap != (int)pen.lineCap)
            {
                renderer.AppendFormat("{0} J\n", (int)pen.lineCap);
                realizedLineCap = (int)pen.lineCap;
            }

            if (realizedLineJoin != (int)pen.lineJoin)
            {
                renderer.AppendFormat("{0} j\n", (int)pen.lineJoin);
                realizedLineJoin = (int)pen.lineJoin;
            }

            if (realizedLineCap == (int)XLineJoin.Miter)
            {
                if (realizedMiterLimit != (int)pen.miterLimit && (int)pen.miterLimit != 0)
                {
                    renderer.AppendFormat("{0} M\n", (int)pen.miterLimit);
                    realizedMiterLimit = (int)pen.miterLimit;
                }
            }

            if (realizedDashStyle != pen.dashStyle || pen.dashStyle == XDashStyle.Custom)
            {
                double dot  = pen.Width;
                double dash = 3 * dot;

                // Line width 0 is not recommended but valid
                XDashStyle dashStyle = pen.DashStyle;
                if (dot == 0)
                {
                    dashStyle = XDashStyle.Solid;
                }

                switch (dashStyle)
                {
                case XDashStyle.Solid:
                    renderer.Append("[]0 d\n");
                    break;

                case XDashStyle.Dash:
                    renderer.AppendFormat("[{0:0.##} {1:0.##}]0 d\n", dash, dot);
                    break;

                case XDashStyle.Dot:
                    renderer.AppendFormat("[{0:0.##}]0 d\n", dot);
                    break;

                case XDashStyle.DashDot:
                    renderer.AppendFormat("[{0:0.##} {1:0.##} {1:0.##} {1:0.##}]0 d\n", dash, dot);
                    break;

                case XDashStyle.DashDotDot:
                    renderer.AppendFormat("[{0:0.##} {1:0.##} {1:0.##} {1:0.##} {1:0.##} {1:0.##}]0 d\n", dash, dot);
                    break;

                case XDashStyle.Custom:
                {
                    StringBuilder pdf = new StringBuilder("[", 256);
                    int           len = pen.dashPattern == null ? 0 : pen.dashPattern.Length;
                    for (int idx = 0; idx < len; idx++)
                    {
                        if (idx > 0)
                        {
                            pdf.Append(' ');
                        }
                        pdf.Append(PdfEncoders.ToString(pen.dashPattern[idx] * pen.width));
                    }
                    // Make an even number of values look like in GDI+
                    if (len > 0 && len % 2 == 1)
                    {
                        pdf.Append(' ');
                        pdf.Append(PdfEncoders.ToString(0.2 * pen.width));
                    }
                    pdf.AppendFormat(CultureInfo.InvariantCulture, "]{0:0.###} d\n", pen.dashOffset * pen.width);
                    string pattern = pdf.ToString();

                    // BUG: [email protected] reported a realizing problem
                    // HACK: I romove the if clause
                    //if (this.realizedDashPattern != pattern)
                    {
                        realizedDashPattern = pattern;
                        renderer.Append(pattern);
                    }
                }
                break;
                }
                realizedDashStyle = dashStyle;
            }

            if (colorMode != PdfColorMode.Cmyk)
            {
                if (realizedStrokeColor.Rgb != color.Rgb)
                {
                    renderer.Append(PdfEncoders.ToString(color, PdfColorMode.Rgb));
                    renderer.Append(" RG\n");
                }
            }
            else
            {
                if (!ColorSpaceHelper.IsEqualCmyk(realizedStrokeColor, color))
                {
                    renderer.Append(PdfEncoders.ToString(color, PdfColorMode.Cmyk));
                    renderer.Append(" K\n");
                }
            }

            if (renderer.Owner.Version >= 14 && realizedStrokeColor.A != color.A)
            {
                PdfExtGState extGState = renderer.Owner.ExtGStateTable.GetExtGStateStroke(color.A);
                string       gs        = renderer.Resources.AddExtGState(extGState);
                renderer.AppendFormat("{0} gs\n", gs);

                // Must create transparany group
                if (renderer.page != null && color.A < 1)
                {
                    renderer.page.transparencyUsed = true;
                }
            }
            realizedStrokeColor = color;
        }
Exemple #23
0
 private void ColorPicker_Load(object sender, EventArgs e)
 {
     panel1.BackColor        = ColorSpaceHelper.HSLtoRGB(MyHSL).ToColor();
     saturationSlider1.Color = new HSL(colorSquare1.CurrentHue, (double)colorSquare1.CurrentSat / 240.0f, 0);
     SetColors();
 }
Exemple #24
0
        /// <summary>
        /// Setups the shading from the specified brush.
        /// </summary>
        public void SetupFromBrush(XLinearGradientBrush brush)
        {
            if (brush == null)
            {
                throw new ArgumentNullException("brush");
            }

            PdfColorMode colorMode = this.document.Options.ColorMode;
            XColor       color1    = ColorSpaceHelper.EnsureColorMode(colorMode, brush.color1);
            XColor       color2    = ColorSpaceHelper.EnsureColorMode(colorMode, brush.color2);

            PdfDictionary function = new PdfDictionary();

            Elements[Keys.ShadingType] = new PdfInteger(2);
            if (colorMode != PdfColorMode.Cmyk)
            {
                Elements[Keys.ColorSpace] = new PdfName("/DeviceRGB");
            }
            else
            {
                Elements[Keys.ColorSpace] = new PdfName("/DeviceCMYK");
            }

            double x1 = 0, y1 = 0, x2 = 0, y2 = 0;

            if (brush.useRect)
            {
                switch (brush.linearGradientMode)
                {
                case XLinearGradientMode.Horizontal:
                    x1 = brush.rect.x;
                    y1 = brush.rect.y;
                    x2 = brush.rect.x + brush.rect.width;
                    y2 = brush.rect.y;
                    break;

                case XLinearGradientMode.Vertical:
                    x1 = brush.rect.x;
                    y1 = brush.rect.y;
                    x2 = brush.rect.x;
                    y2 = brush.rect.y + brush.rect.height;
                    break;

                case XLinearGradientMode.ForwardDiagonal:
                    x1 = brush.rect.x;
                    y1 = brush.rect.y;
                    x2 = brush.rect.x + brush.rect.width;
                    y2 = brush.rect.y + brush.rect.height;
                    break;

                case XLinearGradientMode.BackwardDiagonal:
                    x1 = brush.rect.x + brush.rect.width;
                    y1 = brush.rect.y;
                    x2 = brush.rect.x;
                    y2 = brush.rect.y + brush.rect.height;
                    break;
                }
            }
            else
            {
                x1 = brush.point1.x;
                y1 = brush.point1.y;
                x2 = brush.point2.x;
                y2 = brush.point2.y;
            }
            Elements[Keys.Coords] = new PdfLiteral("[{0:0.###} {1:0.###} {2:0.###} {3:0.###}]", x1, y1, x2, y2);

            //Elements[Keys.Background] = new PdfRawItem("[0 1 1]");
            //Elements[Keys.Domain] =
            Elements[Keys.Function] = function;
            //Elements[Keys.Extend] = new PdfRawItem("[true true]");

            string clr1 = "[" + PdfEncoders.ToString(color1, colorMode) + "]";
            string clr2 = "[" + PdfEncoders.ToString(color2, colorMode) + "]";

            function.Elements["/FunctionType"] = new PdfInteger(2);
            function.Elements["/C0"]           = new PdfLiteral(clr1);
            function.Elements["/C1"]           = new PdfLiteral(clr2);
            function.Elements["/Domain"]       = new PdfLiteral("[0 1]");
            function.Elements["/N"]            = new PdfInteger(1);
        }
Exemple #25
0
        /// <summary>
        /// Setups the shading from the specified brush.
        /// </summary>
        internal void SetupFromBrush(XLinearGradientBrush brush, XGraphicsPdfRenderer renderer)
        {
            if (brush == null)
            {
                throw new ArgumentNullException("brush");
            }

            PdfColorMode colorMode = _document.Options.ColorMode;
            XColor       color1    = ColorSpaceHelper.EnsureColorMode(colorMode, brush._color1);
            XColor       color2    = ColorSpaceHelper.EnsureColorMode(colorMode, brush._color2);

            PdfDictionary function = new PdfDictionary();

            Elements[Keys.ShadingType] = new PdfInteger(2);
            if (colorMode != PdfColorMode.Cmyk)
            {
                Elements[Keys.ColorSpace] = new PdfName("/DeviceRGB");
            }
            else
            {
                Elements[Keys.ColorSpace] = new PdfName("/DeviceCMYK");
            }

            double x1 = 0, y1 = 0, x2 = 0, y2 = 0;

            if (brush._useRect)
            {
                XPoint pt1 = renderer.WorldToView(brush._rect.TopLeft);
                XPoint pt2 = renderer.WorldToView(brush._rect.BottomRight);

                switch (brush._linearGradientMode)
                {
                case XLinearGradientMode.Horizontal:
                    x1 = pt1.X;
                    y1 = pt1.Y;
                    x2 = pt2.X;
                    y2 = pt1.Y;
                    break;

                case XLinearGradientMode.Vertical:
                    x1 = pt1.X;
                    y1 = pt1.Y;
                    x2 = pt1.X;
                    y2 = pt2.Y;
                    break;

                case XLinearGradientMode.ForwardDiagonal:
                    x1 = pt1.X;
                    y1 = pt1.Y;
                    x2 = pt2.X;
                    y2 = pt2.Y;
                    break;

                case XLinearGradientMode.BackwardDiagonal:
                    x1 = pt2.X;
                    y1 = pt1.Y;
                    x2 = pt1.X;
                    y2 = pt2.Y;
                    break;
                }
            }
            else
            {
                XPoint pt1 = renderer.WorldToView(brush._point1);
                XPoint pt2 = renderer.WorldToView(brush._point2);

                x1 = pt1.X;
                y1 = pt1.Y;
                x2 = pt2.X;
                y2 = pt2.Y;
            }

            const string format = Config.SignificantFigures3;

            Elements[Keys.Coords] = new PdfLiteral("[{0:" + format + "} {1:" + format + "} {2:" + format + "} {3:" + format + "}]", x1, y1, x2, y2);

            //Elements[Keys.Background] = new PdfRawItem("[0 1 1]");
            //Elements[Keys.Domain] =
            Elements[Keys.Function] = function;
            //Elements[Keys.Extend] = new PdfRawItem("[true true]");

            string clr1 = "[" + PdfEncoders.ToString(color1, colorMode) + "]";
            string clr2 = "[" + PdfEncoders.ToString(color2, colorMode) + "]";

            function.Elements["/FunctionType"] = new PdfInteger(2);
            function.Elements["/C0"]           = new PdfLiteral(clr1);
            function.Elements["/C1"]           = new PdfLiteral(clr2);
            function.Elements["/Domain"]       = new PdfLiteral("[0 1]");
            function.Elements["/N"]            = new PdfInteger(1);
        }
Exemple #26
0
 public void TryParse()
 {
     Assert.True(ColorSpaceHelper.TryParse("RGB", out _));
     Assert.False(ColorSpaceHelper.TryParse("RGBq", out _));
 }