Exemplo n.º 1
0
        public override byte[] ConvertToByte(ImageEntity entity)
        {
            if (entity.Compress == Compress.ZLIB && entity.Type < ColorBits.LINK)
            {
                var stream = new MemoryStream();
                stream.WriteImage(entity);
                stream.Close();
                return(stream.ToArray());
            }
            var dds = DDS.CreateFromBitmap(entity.Picture, entity.Compress);

            Map[entity] = new DDS_Info(dds, new Point(0, 0), new Point(entity.Width, entity.Height));
            return(dds.Data);
        }
Exemplo n.º 2
0
        public override byte[] ConvertToByte(Sprite entity)
        {
            if (entity.Compress == Compress.ZLIB && entity.Type < ColorBits.LINK)
            {
                using (var ms = new MemoryStream()){
                    Npks.WriteImage(ms, entity);
                    return(ms.ToArray());
                }
            }
            var dds = DDS.CreateFromBitmap(entity.Picture, entity.Compress);

            Map[entity] = new DDS_Info()
            {
                DDS       = dds,
                RightDown = new Point(entity.Width, entity.Height)
            };
            return(dds.Data);
        }
Exemplo n.º 3
0
        public override void CreateFromStream(Stream stream)
        {
            int index_count = stream.ReadInt();

            Album.Length = stream.ReadInt();
            int count = stream.ReadInt();
            var table = new List <Color>(Colors.ReadPalette(stream, count));

            Album.Tables = new List <List <Color> >();
            Album.Tables.Add(table);
            var list = new List <DDS>();

            for (int i = 0; i < index_count; i++)
            {
                var dds = new DDS();
                dds.Version  = (DDS_Version)stream.ReadInt();
                dds.Type     = (ColorBits)stream.ReadInt();
                dds.Index    = stream.ReadInt();
                dds.Size     = stream.ReadInt();
                dds.DDS_Size = stream.ReadInt();
                dds.Width    = stream.ReadInt();
                dds.Height   = stream.ReadInt();
                list.Add(dds);
            }
            var dic      = new Dictionary <Sprite, int>();
            var ver2List = new List <Sprite>();

            for (var i = 0; i < Album.Count; i++)
            {
                var entity = new Sprite(Album);
                entity.Index = Album.List.Count;
                entity.Type  = (ColorBits)stream.ReadInt();
                Album.List.Add(entity);
                if (entity.Type == ColorBits.LINK)
                {
                    dic.Add(entity, stream.ReadInt());
                    continue;
                }
                entity.Compress      = (Compress)stream.ReadInt();
                entity.Width         = stream.ReadInt();
                entity.Height        = stream.ReadInt();
                entity.Length        = stream.ReadInt();             //保留,固定为0
                entity.X             = stream.ReadInt();
                entity.Y             = stream.ReadInt();
                entity.Canvas_Width  = stream.ReadInt();
                entity.Canvas_Height = stream.ReadInt();
                if (entity.Type < ColorBits.LINK && entity.Length != 0)
                {
                    ver2List.Add(entity);
                    continue;
                }
                int j         = stream.ReadInt();
                var dds       = list[stream.ReadInt()];
                var leftup    = new Point(stream.ReadInt(), stream.ReadInt());
                var rightdown = new Point(stream.ReadInt(), stream.ReadInt());
                var top       = stream.ReadInt();
                var info      = new DDS_Info()
                {
                    DDS       = dds,
                    LeftUp    = leftup,
                    RightDown = rightdown,
                    Top       = top
                };
                Map.Add(entity, info);
            }
            foreach (var entity in dic.Keys)
            {
                entity.Target = Album.List[dic[entity]];
            }
            foreach (var dds in list)
            {
                var data = new byte[dds.Size];
                stream.Read(data);
                dds.Data = data;
            }
            foreach (var entity in ver2List)
            {
                var data = new byte[entity.Length];
                stream.Read(data);
                entity.Data = data;
            }
        }