Ejemplo n.º 1
0
        public TileSetModel Read(Stream stream)
        {
            Builder.SetTileSize(_tileSize);
            Builder.SetPixelFormat(TilePixelFormat.Indexed8bpp);

            BinaryReader binReader = new BinaryReader(stream);

            binReader.BaseStream.Position = 0;
            int bytesPerTile = _tileSize * _tileSize / 8;

            int tilesNo = (int)binReader.BaseStream.Length / (bytesPerTile * _bitPlanesNo);

            if (tilesNo == 0)
            {
                return(null);
            }

            for (int tileIndex = 0; tileIndex < tilesNo; tileIndex++)
            {
                byte[] tileData = new byte[_tileSize * _tileSize];

                for (int i = 0; i < _bitPlanesNo; i++)
                {
                    byte[] rawData = binReader.ReadBytes(bytesPerTile);
                    rawData = rawData.Reverse().ToArray();

                    if (rawData.Length == 0)
                    {
                        return(null);
                    }

                    var bitArray = new BitArray(rawData);

                    for (int k = 0; k < _tileSize * _tileSize; k++)
                    {
                        tileData[k] += (byte)((bitArray[k] ? 1 : 0) << i);
                    }
                }

                tileData = tileData.Reverse().ToArray();

                //Start building new tile
                var tileBuilder = TileBuilder.NewTile();
                tileBuilder.SetIndex(tileIndex);
                tileBuilder.SetData(tileData);

                //Add new tile to tileset being build
                Builder.AddTile(tileBuilder.Build());
            }

            return(Builder.Build());
        }
Ejemplo n.º 2
0
        public TileSetModel Read(Stream stream)
        {
            Builder.SetTileSize(TILE_SIZE);
            Builder.SetPixelFormat(TilePixelFormat.Indexed8bpp);

            BinaryReader binReader = new BinaryReader(stream);

            binReader.BaseStream.Position = 0;

            int tilesNo = (int)(binReader.BaseStream.Length / 256);

            if (tilesNo == 0)
            {
                return(null);
            }

            for (int tileIndex = 0; tileIndex < tilesNo; tileIndex++)
            {
                byte[] rawData = binReader.ReadBytes(TILE_SIZE * TILE_SIZE);

                if (rawData.Length == 0)
                {
                    return(null);
                }

                byte[] tileData = new byte[TILE_SIZE * TILE_SIZE];

                for (int k = 0; k < TILE_SIZE * TILE_SIZE; k++)
                {
                    tileData[k] = rawData[(k * 64) % (TILE_SIZE * TILE_SIZE) + k / 4];
                }

                //Start building new tile
                var tileBuilder = TileBuilder.NewTile();
                tileBuilder.SetIndex(tileIndex);
                tileBuilder.SetData(tileData);

                //Add new tile to tileset being build
                Builder.AddTile(tileBuilder.Build());
            }

            return(Builder.Build());
        }