public static SixLabors.ImageSharp.Image <Rgba32> BattlefieldTest() { Console.WriteLine("whereA"); List <Bitmap> monSpawnLeft = new List <Bitmap>(); ImageCriteria criteria = new ImageCriteria(); criteria.AddBack("C:\\Users\\lifei_jljypee\\Desktop\\Discomon Project\\DiscomonProject\\Assets\\UI Assets\\battlefield.jpg") .AddImage("C:\\Users\\lifei_jljypee\\Desktop\\Discomon Project\\DiscomonProject\\Assets\\Mon Art\\grasipup.png") .SetX(385) .SetY(420) .SetXWidth(420) .SetYHeight(420) .SetFlip(true) .SetCentralize(true); for (int i = 0; i < 10; i++) { if (i < 5) { criteria.SetScale(0.2 * (i + 1)); monSpawnLeft.Add(MergeTwoImages(criteria)); } else { criteria.SetScale(1.0); monSpawnLeft.Add(MergeTwoImages(criteria)); } } List <Bitmap> monSpawnRight = new List <Bitmap>(); criteria.ClearBack() .ClearImage() .AddImage("C:\\Users\\lifei_jljypee\\Desktop\\Discomon Project\\DiscomonProject\\Assets\\Mon Art\\psygoat.png") .SetX(1520) .SetFlip(false); for (int i = 0; i < 10; i++) { criteria.AddBack(monSpawnLeft[i]); if (i < 5) { criteria.SetScale(0.2 * (i + 1)); monSpawnRight.Add(MergeTwoImages(criteria)); } else { criteria.SetScale(1.0); monSpawnRight.Add(MergeTwoImages(criteria)); } } List <Bitmap> leftSpawnAnim = GifOntoGif(monSpawnRight, "C:\\Users\\lifei_jljypee\\Desktop\\Discomon Project\\DiscomonProject\\Assets\\Animation Experiments\\LightBurst"); Console.WriteLine("whereB"); List <Bitmap> finalFrames = GifOntoGif(leftSpawnAnim, "C:\\Users\\lifei_jljypee\\Desktop\\Discomon Project\\DiscomonProject\\Assets\\Animation Experiments\\LightBurstFlipped"); Console.WriteLine($"whereC {finalFrames.Count}"); List <(byte[] img, int duration)> images = new List <(byte[], int)>(); Console.WriteLine("whereD"); int framesCount = finalFrames.Count; Console.WriteLine("whereE"); foreach (Bitmap frame in finalFrames) { using (var stream = new MemoryStream()) { frame.Save(stream, System.Drawing.Imaging.ImageFormat.Png); images.Add((stream.ToArray(), 10)); } } Console.WriteLine("whereF"); int width = 0; int height = 0; using (var image = SixLabors.ImageSharp.Image.Load(images[0].img)) { width = image.Width; height = image.Height; } Console.WriteLine("whereG"); // Create a blank canvas for the gif var gif = new SixLabors.ImageSharp.Image <Rgba32>(width, height); for (int i = 0; i < images.Count; i++) { Console.WriteLine("whereH"); // Load image that will be added using (var image = SixLabors.ImageSharp.Image.Load(images[i].img)) { // Resize the image to the output dimensions //image.Mutate(ctx => ctx.Resize(width, height)); // Set the duration of the image image.Frames.RootFrame.Metadata.GetFormatMetadata(SixLabors.ImageSharp.Formats.Gif.GifFormat.Instance).FrameDelay = images[i].duration; // Add the image to the gif gif.Frames.InsertFrame(i, image.Frames.RootFrame); Console.WriteLine($"Frame #{i} added"); } } Console.WriteLine("whereI"); gif.Metadata.GetFormatMetadata(SixLabors.ImageSharp.Formats.Gif.GifFormat.Instance).RepeatCount = 1; Console.WriteLine("whereJ"); if (gif.Frames.Count > framesCount) { gif.Frames.RemoveFrame(gif.Frames.Count - 1); } Console.WriteLine("whereK"); return(gif); }
public static Bitmap MergeTwoImages(ImageCriteria criteria) { //Get the background image Image backImage; if (criteria.IsBitmapBack) { backImage = criteria.BImageBack; } else { backImage = Image.FromFile(criteria.ImageBack); } //Get the overlay image Image overlayImage; if (criteria.IsBitmap) { overlayImage = criteria.BImage; } else { overlayImage = Image.FromFile(criteria.Image); } if (criteria.Flip) { overlayImage.RotateFlip(RotateFlipType.RotateNoneFlipX); } if (backImage == null) { throw new ArgumentNullException("backImage"); } if (overlayImage == null) { throw new ArgumentNullException("overlayImage"); } Bitmap outputImage = new Bitmap(backImage.Width, backImage.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb); if (criteria.XWidth == 0) { criteria.XWidth = overlayImage.Width; } if (criteria.YHeight == 0) { criteria.YHeight = overlayImage.Height; } using (Graphics graphics = Graphics.FromImage(outputImage)) { graphics.DrawImage(backImage, new Rectangle(new Point(), backImage.Size), new Rectangle(new Point(), backImage.Size), GraphicsUnit.Pixel); graphics.DrawImage(overlayImage, new Rectangle(criteria.GetXLoc(), criteria.GetYLoc(), criteria.GetXSize(), criteria.GetYSize()), new Rectangle(new Point(), overlayImage.Size), GraphicsUnit.Pixel); } return(outputImage); }