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);
        }
Exemplo n.º 2
0
        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");
        }
Exemplo n.º 3
0
        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);
        }