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)
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)
I copied an answer from the link Mitch provided that I think will work for me:
public static Bitmap SetOpacity(this Bitmap bitmap, int alpha)
{
var output = new Bitmap(bitmap.Width, bitmap.Height);
foreach (var i in Enumerable.Range(0, output.Palette.Entries.Length))
{
var color = output.Palette.Entries[i];
output.Palette.Entries[i] =
Color.FromArgb(alpha, color.R, color.G, color.B);
}
BitmapData src = bitmap.LockBits(
new Rectangle(0, 0, bitmap.Width, bitmap.Height),
ImageLockMode.ReadOnly,
bitmap.PixelFormat);
BitmapData dst = output.LockBits(
new Rectangle(0, 0, bitmap.Width, bitmap.Height),
ImageLockMode.WriteOnly,
output.PixelFormat);
bitmap.UnlockBits(src);
output.UnlockBits(dst);
return output;
}
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;
}
}