public static PackedSpriteMapMeta PackListOfImages(Frame[] imagesToPack, int frameWidth, int frameHeight, FrameDisposal frameDisposal) { var size = Size.GetDimensions(frameWidth, frameHeight, imagesToPack.Length); var sprite = new Bitmap(frameWidth * size.Cols, frameHeight * size.Rows); var spriteFrame = new Bitmap(frameWidth, frameHeight); using (var g = Graphics.FromImage(sprite)) { using (var sg = Graphics.FromImage(spriteFrame)) { g.FillRectangle(new SolidBrush(Color.Transparent), 0, 0, sprite.Width, sprite.Height); sg.FillRectangle(new SolidBrush(Color.Transparent), 0, 0, sprite.Width, sprite.Height); int x = 0, y = 0; for (int i = 0; i < imagesToPack.Count(); i++) { var bmp = imagesToPack[i]; var brush = new TextureBrush(bmp.Image, System.Drawing.Drawing2D.WrapMode.Clamp); brush.TranslateTransform(bmp.X, bmp.Y); if (frameDisposal == FrameDisposal.Composite) { sg.FillRectangle(brush, 0, 0, bmp.Width + bmp.X, bmp.Height + bmp.Y); brush.Dispose(); brush = new TextureBrush(spriteFrame, System.Drawing.Drawing2D.WrapMode.Clamp); } brush.TranslateTransform(x * frameWidth, y * frameHeight); g.FillRectangle(brush, x * frameWidth, y * frameHeight, bmp.Width + bmp.X, bmp.Height + bmp.Y); brush.Dispose(); if (++x >= size.Cols) { x = 0; y++; } } } } return(new PackedSpriteMapMeta { Image = sprite, FrameHeight = frameHeight, FrameWidth = frameWidth, TotalFrames = imagesToPack.Length, Columns = size.Cols, Rows = size.Rows }); }
public static PackedSpriteMapMeta PackListOfImagesToMemStream(Frame[] imagesToPack, MemoryStream stream, int frameWidth, int frameHeight, FrameDisposal frameDisposal) { var packedSpriteMap = PackListOfImages(imagesToPack, frameWidth, frameHeight, frameDisposal); packedSpriteMap.Image.Save(stream, ImageFormat.Png); return(packedSpriteMap); }