Search code examples
.netimagegraphicstransparencyalpha

How to make a System.Drawing.Image semitransparent?


System.Drawing.Graphics.DrawImage pastes one image on another. But I couldn't find a transparency option.

I have already drawn everything I want in the image, I only want to make it translucent (alpha-transparency)


Solution

  • There is no "transparency" option because what you're trying to do is called Alpha Blending.

    public static class BitmapExtensions
    {
        public static Image SetOpacity(this Image image, float opacity)
        {
            var colorMatrix = new ColorMatrix();
            colorMatrix.Matrix33 = opacity;
            var imageAttributes = new ImageAttributes();
            imageAttributes.SetColorMatrix(
                colorMatrix,
                ColorMatrixFlag.Default,
                ColorAdjustType.Bitmap);
            var output = new Bitmap(image.Width, image.Height);
            using (var gfx = Graphics.FromImage(output))
            {
                gfx.SmoothingMode = SmoothingMode.AntiAlias;
                gfx.DrawImage(
                    image,
                    new Rectangle(0, 0, image.Width, image.Height),
                    0,
                    0,
                    image.Width,
                    image.Height,
                    GraphicsUnit.Pixel,
                    imageAttributes);
            }
            return output;
        }
    }
    

    Alpha Blending