public static void ReplaceSprite(Sprite sprite, Bitmap bmp, bool alpha, bool remapColours, bool useRoomBackground, SpriteImportTransparency transparency, SpriteSheet spritesheet = null, int frame = 0, string filename = "") { if (spritesheet != null) { Rectangle selection = spritesheet.GetFirstSpriteSelection(new Size(bmp.Width, bmp.Height)); if (!selection.IsEmpty) { Bitmap replacement = bmp.Clone(selection, bmp.PixelFormat); ReplaceSprite(sprite, replacement, alpha, remapColours, useRoomBackground, transparency, filename, frame, selection.Left, selection.Top); replacement.Dispose(); } else { string message = String.Format("Tiled selection for sprite {0} was out-of-bounds for image '{1}'", sprite.Number, sprite.SourceFile); throw new InvalidOperationException(message); } } else { ReplaceSprite(sprite, bmp, alpha, remapColours, useRoomBackground, transparency, filename, frame); } }
/// <summary> /// Tries to create bitmap from file, following Sprite's import settings. /// Returns null on failure. /// </summary> public static Bitmap LoadBitmapForSprite(Sprite spr, string filename, int frame) { Bitmap bmp; try { bmp = LoadFrameImageFromFile(filename, frame); if (bmp == null) { return(null); } } catch (Exception) { return(null); } if (spr.ImportAsTile) { SpriteSheet spritesheet; spritesheet = new SpriteSheet(new Point(spr.OffsetX, spr.OffsetY), new Size(spr.ImportWidth, spr.ImportHeight)); Rectangle selection = spritesheet.GetFirstSpriteSelection(new Size(bmp.Width, bmp.Height)); if (selection.IsEmpty) { return(null); } return(bmp.Clone(selection, bmp.PixelFormat)); } return(bmp); }