Added Opacity option to "Image" effect

This commit is contained in:
Jaex 2020-08-29 02:46:41 +03:00
parent eabb0c8b23
commit 6b0fa4cdf6

View file

@ -51,14 +51,29 @@ public class DrawImage : ImageEffect
[DefaultValue(typeof(Size), "0, 0")] [DefaultValue(typeof(Size), "0, 0")]
public Size Size { get; set; } public Size Size { get; set; }
[DefaultValue(false), Description("If image watermark size bigger than source image then don't draw it.")]
public bool AutoHide { get; set; }
[DefaultValue(ImageInterpolationMode.HighQualityBicubic), TypeConverter(typeof(EnumProperNameConverter))] [DefaultValue(ImageInterpolationMode.HighQualityBicubic), TypeConverter(typeof(EnumProperNameConverter))]
public ImageInterpolationMode InterpolationMode { get; set; } public ImageInterpolationMode InterpolationMode { get; set; }
[DefaultValue(CompositingMode.SourceOver), TypeConverter(typeof(EnumProperNameConverter))] [DefaultValue(CompositingMode.SourceOver), TypeConverter(typeof(EnumProperNameConverter))]
public CompositingMode CompositingMode { get; set; } public CompositingMode CompositingMode { get; set; }
[DefaultValue(false), Description("If image watermark size bigger than source image then don't draw it.")] private int opacity;
public bool AutoHide { get; set; }
[DefaultValue(100)]
public int Opacity
{
get
{
return opacity;
}
set
{
opacity = value.Clamp(0, 100);
}
}
public DrawImage() public DrawImage()
{ {
@ -67,7 +82,7 @@ public DrawImage()
public override Bitmap Apply(Bitmap bmp) public override Bitmap Apply(Bitmap bmp)
{ {
if (SizeMode != DrawImageSizeMode.DontResize && Size.Width <= 0 && Size.Height <= 0) if (Opacity < 1 || (SizeMode != DrawImageSizeMode.DontResize && Size.Width <= 0 && Size.Height <= 0))
{ {
return bmp; return bmp;
} }
@ -116,11 +131,22 @@ public override Bitmap Apply(Bitmap bmp)
g.InterpolationMode = ImageHelpers.GetInterpolationMode(InterpolationMode); g.InterpolationMode = ImageHelpers.GetInterpolationMode(InterpolationMode);
g.PixelOffsetMode = PixelOffsetMode.Half; g.PixelOffsetMode = PixelOffsetMode.Half;
g.CompositingMode = CompositingMode; g.CompositingMode = CompositingMode;
if (Opacity < 100)
{
using (Bitmap bmpWatermarkTransparent = ColorMatrixManager.Alpha(Opacity / 100f).Apply(bmpWatermark))
{
g.DrawImage(bmpWatermarkTransparent, imageRectangle);
}
}
else
{
g.DrawImage(bmpWatermark, imageRectangle); g.DrawImage(bmpWatermark, imageRectangle);
} }
} }
} }
} }
}
return bmp; return bmp;
} }