public static void Combine(ImageFile[] images, string outputFile, string mapFile) { // Find max width and total height var maxWidth = 0; var maxHeight = 0; var totalHeight = 0; foreach (var image in images) { totalHeight += image.Image.Height; if (image.Image.Width > maxWidth) maxWidth = image.Image.Width; if (image.Image.Height > maxHeight) maxHeight = image.Image.Height; } Console.WriteLine(string.Format("Number of images: {0}, total height: {1}px, width: {2}", images.Length, totalHeight, maxWidth)); // Create the actual sprite var currentY = 0; const int currentX = 0; var surface = new FreeImageBitmap(maxWidth, totalHeight); foreach (var image in images) { var freeImage = GetFreeImage(image); surface.Paste(freeImage, currentX, currentY, 0); currentY += image.Image.Height; image.X = currentX; image.Y = currentY; Console.WriteLine("{0} copied to {1}, {2}", image.Name, image.X, image.Y); } Console.WriteLine("Writing sprite: " + outputFile); using (var stream = File.OpenWrite(outputFile)) { surface.Save(stream, FREE_IMAGE_FORMAT.FIF_PNG); } Console.WriteLine("Writing sprite map: " + mapFile); using (var writer = File.CreateText(mapFile)) { foreach (var image in images) { writer.WriteLine(image); image.Dispose(); } } }
public static FreeImageBitmap GetFreeImage(ImageFile image) { return (FreeImageBitmap)image.Image; }