Skip to content

Gradient with opacity not working... #1040

@equinox2k

Description

@equinox2k

Prerequisites

  • I have written a descriptive issue title
  • I have verified that I am running the latest version of ImageSharp
  • I have verified if the problem exist in both DEBUG and RELEASE mode
  • I have searched open and closed issues to ensure it has not already been reported

Description

Gradient's with alpha not working as expected

Steps to Reproduce

I have created an example that shows gradient not working as expected.. it should do a iOS style gradient overlay, however produces a semi transparent overlay but of a single color where alpha doesnt change...

using SixLabors.ImageSharp;
using SixLabors.ImageSharp.PixelFormats;
using SixLabors.ImageSharp.Processing;
using SixLabors.Primitives;
using SixLabors.Shapes;

namespace EQL.ImageProcessors
{
    public static class GlossProcessor
    {
        public static IImageProcessingContext ApplyGloss(this IImageProcessingContext ctx)
        {
            Size size = ctx.GetCurrentSize();
            IPathCollection glossPath = BuildGloss(size.Width, size.Height);
            var graphicsOptions = new GraphicsOptions(true)
            {
                ColorBlendingMode = PixelColorBlendingMode.Normal,
                AlphaCompositionMode = PixelAlphaCompositionMode.SrcAtop
            };
            var linearGradientBrush = new LinearGradientBrush(new Point(0, 0), new Point(0, size.Height / 2), GradientRepetitionMode.Repeat, new ColorStop(0, Color.White.WithAlpha(0.5f)), new ColorStop(1, Color.White.WithAlpha(0.25f)));
            return ctx.Fill(graphicsOptions, linearGradientBrush, glossPath);
        }

        private static IPathCollection BuildGloss(int imageWidth, int imageHeight)
        {
            var pathBuilder = new PathBuilder();
            pathBuilder.AddLine(new PointF(0, 0), new PointF(imageWidth, 0));
            pathBuilder.AddLine(new PointF(imageWidth, 0), new PointF(imageWidth, imageHeight * 0.4f));
            pathBuilder.AddBezier(new PointF(imageWidth, imageHeight * 0.4f), new PointF(imageWidth / 2, imageHeight * 0.6f), new PointF(0, imageHeight * 0.4f));
            pathBuilder.CloseFigure();
            return new PathCollection(pathBuilder.Build());
        }
    }
}

can be called by loading a image and applying via...

image.Mutate(i => i.ApplyGloss());

System Configuration

macOS

  • ImageSharp version:
    0.7beta

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions