private void ComputeSpriteParameters(SpriteBlockHeader block, out Point offset, out Size size) { int x = block.spriteHeaders.Min(z => z.LeftMargin); int y = block.spriteHeaders.Min(z => z.TopMargin); int w = block.spriteHeaders.Max(z => z.SpriteWidth); int h = block.spriteHeaders.Max(z => z.SpriteHeight); offset = new Point(x, y); size = new Size(w, h); }
public unsafe byte[] GetSprite2(int blockIndex, int spriteIndex) { SpriteBlockHeader sbh = headers[blockIndex]; spriteIndex = spriteIndex % sbh.spriteHeaders.Count; var sh = sbh.spriteHeaders[spriteIndex]; int offset = sbh.Offsets[spriteIndex]; offset += 32; if (sh.Type == 1) { return(LoadSpriteType12(sh, bytes, offset)); } throw new Exception("wrong type"); }
public unsafe Bitmap GetSprite(int blockIndex, int spriteIndex) { SpriteBlockHeader sbh = headers[blockIndex]; spriteIndex = spriteIndex % sbh.spriteHeaders.Count; var sh = sbh.spriteHeaders[spriteIndex]; int offset = sbh.Offsets[spriteIndex]; var bmp = new Bitmap(sh.FullWidth, sh.FullHeight, PixelFormat.Format24bppRgb); var color = Color.FromArgb(palette[0, 0], palette[0, 1], palette[0, 2]); using (var g = Graphics.FromImage(bmp)) g.FillRectangle(new SolidBrush(color), 0, 0, sh.FullWidth, sh.FullHeight); var imageData = bmp.LockBits(new Rectangle(0, 0, sh.FullWidth, sh.FullHeight), ImageLockMode.ReadWrite, bmp.PixelFormat); offset += 32; //TODO apply same byte logic as for loadsprite12 if (sh.Type == 0) { LoadSpriteType0(sh, imageData, offset); } else if (sh.Type == 1) { /* var d = LoadSpriteType12(sh, bytes, offset); * Marshal.Copy(d, 0, imageData.Scan0, d.Length);*/ LoadSpriteType1(sh, imageData, offset); } else if (sh.Type == 2) { LoadSpriteType2(sh, imageData, offset); } else if (sh.Type == 3) { LoadSpriteType3(sh, imageData, offset); } bmp.UnlockBits(imageData); return(bmp); }