mirror of
https://github.com/ShareX/ShareX.git
synced 2024-06-30 12:11:07 +12:00
Added Background & EdgeOverlap options to DrawParticles image effect
This commit is contained in:
parent
ad3cad7584
commit
cb4d4d1924
|
@ -57,6 +57,9 @@ public int ImageCount
|
|||
}
|
||||
}
|
||||
|
||||
[DefaultValue(false)]
|
||||
public bool Background { get; set; }
|
||||
|
||||
[DefaultValue(false)]
|
||||
public bool RandomSize { get; set; }
|
||||
|
||||
|
@ -90,6 +93,9 @@ public int ImageCount
|
|||
[DefaultValue(0)]
|
||||
public int NoOverlapOffset { get; set; }
|
||||
|
||||
[DefaultValue(false)]
|
||||
public bool EdgeOverlap { get; set; }
|
||||
|
||||
private List<Rectangle> imageRectangles = new List<Rectangle>();
|
||||
|
||||
public DrawParticles()
|
||||
|
@ -99,7 +105,32 @@ public DrawParticles()
|
|||
|
||||
public override Bitmap Apply(Bitmap bmp)
|
||||
{
|
||||
string imageFolder = FileHelpers.ExpandFolderVariables(ImageFolder, true);
|
||||
if (Background)
|
||||
{
|
||||
Bitmap result = bmp.CreateEmptyBitmap();
|
||||
|
||||
DrawParticlesFromFolder(result, ImageFolder);
|
||||
|
||||
using (Graphics g = Graphics.FromImage(result))
|
||||
{
|
||||
g.DrawImage(bmp, 0, 0, bmp.Width, bmp.Height);
|
||||
}
|
||||
|
||||
bmp.Dispose();
|
||||
|
||||
return result;
|
||||
}
|
||||
else
|
||||
{
|
||||
DrawParticlesFromFolder(bmp, ImageFolder);
|
||||
|
||||
return bmp;
|
||||
}
|
||||
}
|
||||
|
||||
private void DrawParticlesFromFolder(Bitmap bmp, string imageFolder)
|
||||
{
|
||||
imageFolder = FileHelpers.ExpandFolderVariables(imageFolder, true);
|
||||
|
||||
if (!string.IsNullOrEmpty(imageFolder) && Directory.Exists(imageFolder))
|
||||
{
|
||||
|
@ -127,8 +158,6 @@ public override Bitmap Apply(Bitmap bmp)
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
return bmp;
|
||||
}
|
||||
|
||||
private void DrawImage(Image img, Image img2, Graphics g)
|
||||
|
@ -161,8 +190,10 @@ private void DrawImage(Image img, Image img2, Graphics g)
|
|||
return;
|
||||
}
|
||||
|
||||
int xOffset = img.Width - width - 1;
|
||||
int yOffset = img.Height - height - 1;
|
||||
int minOffsetX = EdgeOverlap ? -width + 1 : 0;
|
||||
int minOffsetY = EdgeOverlap ? -height + 1 : 0;
|
||||
int maxOffsetX = img.Width - (EdgeOverlap ? 0 : width) - 1;
|
||||
int maxOffsetY = img.Height - (EdgeOverlap ? 0 : height) - 1;
|
||||
|
||||
Rectangle rect, overlapRect;
|
||||
int attemptCount = 0;
|
||||
|
@ -170,13 +201,15 @@ private void DrawImage(Image img, Image img2, Graphics g)
|
|||
do
|
||||
{
|
||||
attemptCount++;
|
||||
|
||||
if (attemptCount > 1000)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
rect = new Rectangle(RandomFast.Next(Math.Min(0, xOffset), Math.Max(0, xOffset)),
|
||||
RandomFast.Next(Math.Min(0, yOffset), Math.Max(0, yOffset)), width, height);
|
||||
int x = RandomFast.Next(Math.Min(minOffsetX, maxOffsetX), Math.Max(minOffsetX, maxOffsetX));
|
||||
int y = RandomFast.Next(Math.Min(minOffsetY, maxOffsetY), Math.Max(minOffsetY, maxOffsetY));
|
||||
rect = new Rectangle(x, y, width, height);
|
||||
|
||||
overlapRect = rect.Offset(NoOverlapOffset);
|
||||
} while (NoOverlap && imageRectangles.Any(x => x.IntersectsWith(overlapRect)));
|
||||
|
|
Loading…
Reference in a new issue