Ejemplo n.º 1
0
        private void CreateImageFromTileset()
        {
            //there are enough windows that show tileset images you'd think I should turn some/all of this into a method somewhere
            tilesetPicture.Height = (int)(Tileset.TotalNumberOfTiles + 9) / 10 * 32;
            var image = new Bitmap(tilesetPicture.Width, tilesetPicture.Height, System.Drawing.Imaging.PixelFormat.Format8bppIndexed);
            var data  = image.LockBits(new Rectangle(0, 0, image.Width, image.Height), ImageLockMode.WriteOnly, PixelFormat.Format8bppIndexed);

            byte[] bytes = new byte[data.Height * data.Stride];
            //Marshal.Copy(data.Scan0, bytes, 0, bytes.Length);
            for (uint i = 0; i < Tileset.TotalNumberOfTiles; ++i)
            {
                var tileImage = Tileset.Images[Tileset.ImageAddress[i]];
                var xOrg      = (i % 10) * 32;
                var yOrg      = i / 10 * 32;
                for (uint x = 0; x < 32; ++x)
                {
                    for (uint y = 0; y < 32; ++y)
                    {
                        bytes[xOrg + x + (yOrg + y) * data.Stride] = tileImage[x + y * 32];
                    }
                }
            }
            Marshal.Copy(bytes, 0, data.Scan0, bytes.Length);
            image.UnlockBits(data);

            var palette = new Palette();

            palette.CopyFrom(Tileset.Palette);
            palette.Colors[0] = Palette.Convert(TexturedJ2L.TranspColor);
            palette.Apply(image);

            ThreadSafeTilesetImage = (tilesetPicture.Image = image).Clone() as Image;
            smartPicture.Image     = Properties.Resources.SmartTilesPermutations;
            framesPicture.Image    = new Bitmap(32, 32);
        }
        public static void Apply(this Palette pal, Bitmap bm)
        {
            var cpal = bm.Palette;

            pal.Apply(cpal);
            bm.Palette = cpal;
        }
        public static Bitmap ToBitmap(this GraphicsBank tiles, Palette palette)
        {
            int widthTiles  = tiles.TilesX;
            int heightTiles = tiles.TilesY;

            var bm = new Bitmap(widthTiles * Tile.Width, heightTiles * Tile.Height, tiles.Format.AsPixelFormat());

            palette.Apply(bm);

            tiles.DrawInBitmap(bm);

            return(bm);
        }
        public static Bitmap ToBitmap(this Tilemap tilemap, GraphicsBank tileSet, Palette palette)
        {
            int widthTiles  = tilemap.TilesX;
            int heightTiles = tilemap.TilesY;

            var bm = new Bitmap(widthTiles * Tile.Width, heightTiles * Tile.Height, PixelFormat.Format8bppIndexed);

            palette.Apply(bm);

            tilemap.DrawInBitmap(tileSet, bm);

            return(bm);
        }