# Add Glow and Soft Edges

DsImaging is a Document Solutions product which offers a rich library for processing all popular image formats, without using any external image editor.

## Content

DsImaging provides [ApplyGlow](/document-solutions/dot-net-imaging-api/api/online/DS.Documents.Imaging/GrapeCity.Documents.Imaging.GrayscaleBitmap.ApplyGlow.html) method in [GrayscaleBitmap](/document-solutions/dot-net-imaging-api/api/online/DS.Documents.Imaging/GrapeCity.Documents.Imaging.GrayscaleBitmap.html) class that will be used to add glow effect as well as soft edges to graphics. The glow effect inflates all non-transparent areas of the image by the specified amount and then applies the Gaussian blur to make the border smooth. The soft edges effect deflates non-transparent areas, then applies the Gaussian blur. The glow and soft edges effects are usually applied to a full-color image within a [GcBitmap](/document-solutions/dot-net-imaging-api/api/online/DS.Documents.Imaging/GrapeCity.Documents.Imaging.GcBitmap.html). The first parameter of the method is set to a positive value (for glow effect) or a negative value (for soft edges effect) as per the requirement.

| **Glow Effect** | **Soft Edges Effect** |
| ----------- | ----------------- |
| ![](https://cdn.mescius.io/document-site-files/images/a5680f0e-2d32-45dc-8048-d3ef11d0dae7/images/withglow.png?width=700) | ![](https://cdn.mescius.io/document-site-files/images/a5680f0e-2d32-45dc-8048-d3ef11d0dae7/images/withsoftedges.png?width=400) |

Refer to the following example to apply the glow effect:

```csharp
// Initialize TextLayout.    
var tl = new TextLayout(96f);

// Configure text format.
    var f1 = new TextFormat
    {
        FontName = "Calibri",
        FontSize = 120,
        ForeColor = Color.DarkOrchid,
        FontBold = true
    };
    var f2 = new TextFormat(f1)
    {
        ForeColor = Color.White,
        StrokePen = new Pen(Color.DarkOrchid, 3)
    };

// Append the text.
    tl.Append("Grape", f1);
tl.Append("City", f2);

// Initialize GcBitmap.
using var bmp = new GcBitmap(880, 390, false);

// Create the graphic using text layout defined.
using (var g = bmp.CreateGraphics(Color.DarkGray))
{
    g.DrawTextLayout(tl, new PointF(100, 80));
}

// Save the image without glow.
bmp.SaveAsPng("WithoutGlow.png");

// Draw the text on a transparent bitmap at first.
using (var g = bmp.CreateGraphics(Color.Transparent))
{
    g.Renderer.SlowAntialiasing = true;
    g.DrawTextLayout(tl, new PointF(100, 80));
}

// Convert the image to a transparency mask.
using var gs = bmp.ToGrayscaleBitmap(ColorChannel.Alpha);

// Apply the glow effect to the transparency mask.
gs.ApplyGlow(4, 6);

/* Map a shadow from the transparency mask to the source GcBitmap drawing opaque pixels with glow color (yellow).
Apply some additional transparency.*/
gs.ToShadowBitmap(bmp, Color.Yellow, 0.8f);

// Fill the background.
bmp.ConvertToOpaque(Color.Gray);

// Draw the text over the prepared background.
using (var g = bmp.CreateGraphics())
{
    g.Renderer.SlowAntialiasing = true;
    g.DrawTextLayout(tl, new PointF(100, 80));
}

// Save the image with glow.
bmp.SaveAsPng("WithGlow.png");
```

Refer to the following example to apply the soft edges effect:

```csharp
// Initialize PathBuilder.
var pb = new PathBuilder();
pb.BeginFigure(100, 350);
pb.AddLine(210, 310);

// Define an arc.
var arc = new ArcSegment
{
    Size = new SizeF(183, 173),
    SweepDirection = SweepDirection.Clockwise,
    Point = new PointF(550, 205),
};

// Add arcs and lines.
pb.AddArc(arc);
pb.AddLine(650, 170);
pb.AddLine(680, 250);
pb.AddLine(575, 285);
arc.Point = new PointF(240, 390);
pb.AddArc(arc);
pb.AddLine(130, 430);
pb.EndFigure(true);
pb.Figures.Add(new EllipticFigure(new RectangleF(295, 197, 200, 190)));
var gpFill = pb.ToPath();
var gpStroke = gpFill.Widen(new Pen(Color.Black, 20));

// Draw the image.
using var bmp = new GcBitmap(800, 600, false);
var renderer = bmp.EnsureRendererCreated();

bmp.Clear(Color.RosyBrown);
renderer.FillPath(gpFill, Color.CornflowerBlue);
renderer.FillPath(gpStroke, Color.Moccasin);

// Save the image without soft edges.
bmp.SaveAsPng("WithoutSoftEdges.png");

// Draw the figure on a transparent background.
bmp.Clear(Color.Transparent);
renderer.FillPath(gpFill, Color.CornflowerBlue);
renderer.FillPath(gpStroke, Color.Moccasin);

// Convert the image to the transparency mask.
using var gs = bmp.ToGrayscaleBitmap(ColorChannel.Alpha);

// Apply the soft edges effect to the transparency mask.
gs.ApplyGlow(-4, 8);

// Draw the original image.
bmp.Clear(Color.RosyBrown);
renderer.TransparencyMaskBitmap = gs;
renderer.FillPath(gpFill, Color.CornflowerBlue);
renderer.FillPath(gpStroke, Color.Moccasin);

// Save the image with soft edges.
bmp.SaveAsPng("WithSoftEdges.png");
```