public void Handle(Data.Sprite sprite, ref Bitmap bmp) { var rct = bmp.Scan(); var image = new Bitmap(rct.Width, rct.Height); using (var g = Graphics.FromImage(image)) { var empty = new Rectangle(Point.Empty, rct.Size); g.DrawImage(bmp, empty, rct, GraphicsUnit.Pixel); } bmp = image; }
public void AddSprite(uint spriteIndex, Data.Sprite sprite) { sprites.Add(spriteIndex, sprite); }
public static Data.Sprite ImportImage(string Filename) { if (System.IO.File.Exists(Filename)) { Bitmap bitmap = new Bitmap(Filename); if (bitmap.Width % 8 == 0 && bitmap.Height % 8 == 0) { Data.Sprite Sprite; System.Drawing.Imaging.ColorPalette palette = bitmap.Palette; if (palette.Entries.Length <= 16) { if (palette.Entries.Length > 1) { Sprite = new Data.Sprite(bitmap.Width / 8, bitmap.Height / 8, Data.Sprite.SpriteType.Color16); } else { throw new Exception("The image loaded was not indexed or used an undefined alpha channel."); } } else { bool r = false; int i = 16; while (i < palette.Entries.Length & !r) { if (palette.Entries[i].ToArgb() != Color.Black.ToArgb()) { r = true; } i++; } if (r) { Sprite = new Data.Sprite(bitmap.Width / 8, bitmap.Height / 8, Data.Sprite.SpriteType.Color256); } else { Sprite = new Data.Sprite(bitmap.Width / 8, bitmap.Height / 8, Data.Sprite.SpriteType.Color16); } } for (int p = 0; p < Sprite.Palette.Colors.Length; p++) { if (p < palette.Entries.Length) { Sprite.Palette.Colors[p] = new Data.GBAcolor(palette.Entries[p]); } } Sprite.ImageData = GetDataFromBitmap(bitmap, Sprite.Palette.Type); return(Sprite); } else { throw new Exception("The image's dimensions were not multiples of eight."); } } else { throw new Exception("The file does not exist."); } }