Skip to content

Unexpected behavior of Drawables.Draw() when WriteMask exists #1963

Description

@GarthTB

Magick.NET version

Magick.NET-Q16-x64 14.10.2

Environment (Operating system, version and so on)

Windows 11 26200.7840, .NET 10.0, C# 14.0

Description

I need to apply a solid color to the four rounded corners of an image. Here's my code:

using ImageMagick;
using ImageMagick.Drawing;
using static ImageMagick.CompositeOperator;
using static ImageMagick.MagickColors;

using MagickImage img = new("lena_std.tif");
var (w, h) = (img.Width, img.Height);
var r = .3 * Math.Min(w, h);
using MagickImage mask = new(Black, w, h);
new Drawables().FillColor(White).RoundRectangle(0, 0, w, h, r, r).Draw(mask);
img.SetWriteMask(mask);
using MagickImage colorLayer = new(Aqua, w, h);
img.Composite(colorLayer, Over);
img.RemoveWriteMask();
img.Write("lena_std_mod1.tif");

Make a black-and-white WriteMask and apply it to the target image, then make a solid-color image and Composite. The result is as expected. To minimize intermediate images, I switched to drawing a solid-color rectangle:

img.SetWriteMask(mask);
new Drawables().FillColor(Aqua).Rectangle(0, 0, w, h).Draw(img);
img.RemoveWriteMask();
img.Write("lena_std_mod2.tif");

The result is a transparent center and solid-colored corners, without anything of Lena. Is there a bug or am I using it incorrectly?

Steps to Reproduce

using ImageMagick;
using ImageMagick.Drawing;
using static ImageMagick.CompositeOperator;
using static ImageMagick.MagickColors;

using MagickImage img = new("lena_std.tif");
var (w, h) = (img.Width, img.Height);
var r = .3 * Math.Min(w, h);
using MagickImage mask = new(Black, w, h);
new Drawables().FillColor(White).RoundRectangle(0, 0, w, h, r, r).Draw(mask);
img.SetWriteMask(mask);
using MagickImage colorLayer = new(Aqua, w, h); // Here!
img.Composite(colorLayer, Over);
img.RemoveWriteMask();
img.Write("lena_std_mod1.tif");
using ImageMagick;
using ImageMagick.Drawing;
using static ImageMagick.MagickColors;

using MagickImage img = new("lena_std.tif");
var (w, h) = (img.Width, img.Height);
var r = .3 * Math.Min(w, h);
using MagickImage mask = new(Black, w, h);
new Drawables().FillColor(White).RoundRectangle(0, 0, w, h, r, r).Draw(mask);
img.SetWriteMask(mask);
new Drawables().FillColor(Aqua).Rectangle(0, 0, w, h).Draw(img); // Here!
img.RemoveWriteMask();
img.Write("lena_std_mod2.tif");

Images

lena_std.tif
lena_std_mod1.tif
lena_std_mod2.tif

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions