Example #1
0
        public override void Render(Graphics gr, GraphicsPath path)
        {
            var state   = gr.Save();
            var padding = Blur * 2 + 1;
            var rect    = path.GetBounds();
            var color1  = Color.Transparent;
            var color2  = Color;
            Func <float, float> func = (c) => ((c - 0.5f) * 2);

            if (OuterGlow)
            {
                color1  = Color;
                color2  = Color.Transparent;
                func    = (c) => (c * 2);
                padding = Blur * 3 + 1;
            }

            var w = (int)(rect.Width + padding * 2 + 4);
            var h = (int)(rect.Height + padding * 2 + 4);

            using (var bmp = new Bitmap(w, h))
                using (var bmpGr = Graphics.FromImage(bmp))
                {
                    bmpGr.SmoothingMode     = SmoothingMode.AntiAlias;
                    bmpGr.InterpolationMode = InterpolationMode.HighQualityBilinear;
                    bmpGr.PixelOffsetMode   = PixelOffsetMode.HighQuality;

                    bmpGr.TranslateTransform(-rect.Location.X + padding, -rect.Location.Y + padding);
                    if (Blur > 0)
                    {
                        bmpGr.Clear(Color.Black);
                        bmpGr.FillPath(Color.White.Brush(), path);

                        var blur = new GaussianBlurOneChannel(bmp);
                        using (var bmp2 = blur.Process(Blur, color1, color2, func))
                        {
                            if (OuterGlow)
                            {
                                gr.ExcludeClip(new Region(path));
                            }
                            else
                            {
                                gr.SetClip(path);
                            }

                            gr.DrawImage(bmp2, rect.Location.X - padding - padding / 10, rect.Location.Y - padding);
                        }
                    }
                }

            gr.Restore(state);
            gr.ResetClip();
        }
Example #2
0
        public override void Render(Graphics gr, GraphicsPath path)
        {
            var state   = gr.Save();
            var padding = Blur * 2 + 1 + Distance;
            var rect    = path.GetBounds();
            var offset  = new PointF(Direction.X * Distance, Direction.Y * Distance);
            var color1  = Color.Transparent;
            var color2  = Color;
            var color3  = ColorShadow;
            Func <float, float> func = null;// (c) => ((c - 0.5f) * 2);

            gr.SetClip(path);

            var w = (int)(rect.Width + padding * 2 + 4);
            var h = (int)(rect.Height + padding * 2 + 4);

            using (var bmp = new Bitmap(w, h))
                using (var bmpGr = Graphics.FromImage(bmp))
                {
                    bmpGr.SmoothingMode     = SmoothingMode.AntiAlias;
                    bmpGr.InterpolationMode = InterpolationMode.HighQualityBilinear;
                    bmpGr.PixelOffsetMode   = PixelOffsetMode.HighQuality;

                    bmpGr.TranslateTransform(-rect.Location.X + padding, -rect.Location.Y + padding);
                    bmpGr.Clear(Color.Black);
                    bmpGr.FillPath(Color.White.Brush(), path);

                    var blur = new GaussianBlurOneChannel(bmp);
                    using (var bmp2 = blur.Process(Blur, color1, color3, func))
                        gr.DrawImage(bmp2, rect.Location.X - padding - padding / 10 - offset.X, rect.Location.Y - padding - offset.Y);
                    using (var bmp2 = blur.Process(Blur, color1, color2, func))
                        gr.DrawImage(bmp2, rect.Location.X - padding - padding / 10 + offset.X, rect.Location.Y - padding + offset.Y);
                }

            gr.Restore(state);
            gr.ResetClip();
        }
Example #3
0
        public override void Render(Graphics gr, GraphicsPath path)
        {
            var state   = gr.Save();
            var padding = Blur * 3 + 2;
            var offset  = new PointF(Direction.X * Distance, Direction.Y * Distance);
            var rect    = path.GetBounds();
            var w       = (int)(rect.Width + padding * 2 + 4);
            var h       = (int)(rect.Height + padding * 2 + 4);

            using (var bmp = new Bitmap(w, h))
                using (var bmpGr = Graphics.FromImage(bmp))
                {
                    bmpGr.SmoothingMode     = SmoothingMode.AntiAlias;
                    bmpGr.InterpolationMode = InterpolationMode.HighQualityBilinear;
                    bmpGr.PixelOffsetMode   = PixelOffsetMode.HighQuality;

                    bmpGr.TranslateTransform(-rect.Location.X + padding, -rect.Location.Y + padding);
                    if (Blur > 0)
                    {
                        bmpGr.Clear(Color.Black);
                        bmpGr.FillPath(Color.White.Brush(), path);

                        var blur = new GaussianBlurOneChannel(bmp);
                        using (var bmp2 = blur.Process(Blur, Color, Color.Transparent))
                            gr.DrawImage(bmp2, rect.Location.X - padding + offset.X, rect.Location.Y - padding + offset.Y);
                    }
                    else
                    {
                        bmpGr.FillPath(Color.Brush(), path);
                        gr.DrawImage(bmp, rect.Location.X - padding + offset.X, rect.Location.Y - padding + offset.Y);
                    }
                }

            gr.Restore(state);
            gr.ResetClip();
        }