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); }
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); }
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; } }