Add tiling support to "Image" image effect

This commit is contained in:
Jaex 2020-11-15 17:29:26 +03:00
parent b895f3fb2b
commit 5c3d8cb19c
2 changed files with 21 additions and 9 deletions

View file

@ -83,7 +83,7 @@ public DrawImage()
public override Bitmap Apply(Bitmap bmp) public override Bitmap Apply(Bitmap bmp)
{ {
if (Opacity < 1 || (SizeMode != DrawImageSizeMode.DontResize && Size.Width <= 0 && Size.Height <= 0)) if (Opacity < 1)
{ {
return bmp; return bmp;
} }
@ -98,7 +98,7 @@ public override Bitmap Apply(Bitmap bmp)
{ {
Size imageSize; Size imageSize;
if (SizeMode == DrawImageSizeMode.AbsoluteSize) if (SizeMode == DrawImageSizeMode.AbsoluteSize || SizeMode == DrawImageSizeMode.Tile)
{ {
int width = Size.Width == -1 ? bmp.Width : Size.Width; int width = Size.Width == -1 ? bmp.Width : Size.Width;
int height = Size.Height == -1 ? bmp.Height : Size.Height; int height = Size.Height == -1 ? bmp.Height : Size.Height;
@ -135,18 +135,29 @@ public override Bitmap Apply(Bitmap bmp)
g.PixelOffsetMode = PixelOffsetMode.Half; g.PixelOffsetMode = PixelOffsetMode.Half;
g.CompositingMode = CompositingMode; g.CompositingMode = CompositingMode;
if (Opacity < 100) if (SizeMode == DrawImageSizeMode.Tile)
{ {
using (ImageAttributes ia = new ImageAttributes()) using (TextureBrush brush = new TextureBrush(bmpWatermark, WrapMode.Tile))
{ {
ColorMatrix matrix = ColorMatrixManager.Alpha(Opacity / 100f); brush.TranslateTransform(imageRectangle.X, imageRectangle.Y);
ia.SetColorMatrix(matrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap); g.FillRectangle(brush, imageRectangle);
g.DrawImage(bmpWatermark, imageRectangle, 0, 0, bmpWatermark.Width, bmpWatermark.Height, GraphicsUnit.Pixel, ia);
} }
} }
else else
{ {
g.DrawImage(bmpWatermark, imageRectangle); if (Opacity < 100)
{
using (ImageAttributes ia = new ImageAttributes())
{
ColorMatrix matrix = ColorMatrixManager.Alpha(Opacity / 100f);
ia.SetColorMatrix(matrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap);
g.DrawImage(bmpWatermark, imageRectangle, 0, 0, bmpWatermark.Width, bmpWatermark.Height, GraphicsUnit.Pixel, ia);
}
}
else
{
g.DrawImage(bmpWatermark, imageRectangle);
}
} }
} }
} }

View file

@ -48,6 +48,7 @@ public enum DrawImageSizeMode // Localized
DontResize, DontResize,
AbsoluteSize, AbsoluteSize,
PercentageOfWatermark, PercentageOfWatermark,
PercentageOfCanvas PercentageOfCanvas,
Tile
} }
} }