Example #1
0
        public override byte[] ConvertToByte(Sprite entity)
        {
            if (entity.Type < ColorBits.LINK && entity.Length > 0)
            {
                return(base.ConvertToByte(entity));
            }

            if (entity.Width * entity.Height == 1)
            {
                entity.Compress = Compress.NONE;
                return(base.ConvertToByte(entity));
            }
            if (entity.Compress == Compress.ZLIB)
            {
                //非DDS_ZLIB 不识别
                entity.Compress = Compress.DDS_ZLIB;
            }
            var dds = DDS.CreateFromBitmap(entity);

            Map[entity.Index] = new DDS_Info {
                DDS       = dds,
                RightDown = new Point(dds.Width, dds.Height)
            };
            return(new byte[0]);
        }
Example #2
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);
        }
        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);
        }
        /// <summary>
        /// 校正下标
        /// </summary>
        /// <returns></returns>
        public override byte[] AdjustData()
        {
            var ms = new MemoryStream();

            foreach (var entity in Album.List)
            {
                ms.WriteInt((int)entity.Type);
                ms.WriteInt((int)entity.Compress);
                if (entity.Type > ColorBits.LINK)
                {
                    ms.WriteInt(entity.Size.Width);
                    ms.WriteInt(entity.Size.Height);
                    ms.WriteInt(0x00);
                    ms.WriteInt(entity.Location.X);
                    ms.WriteInt(entity.Location.Y);
                    ms.WriteInt(entity.Canvas_Size.Width);
                    ms.WriteInt(entity.Canvas_Size.Height);
                    ms.WriteInt(0x00);
                    var info      = Map[entity];
                    var dds_index = List.IndexOf(info.DDS);
                    ms.WriteInt(dds_index);
                    ms.WriteInt(info.LeftUp.X);
                    ms.WriteInt(info.LeftUp.Y);
                    ms.WriteInt(info.RightDown.X);
                    ms.WriteInt(info.RightDown.Y);
                    ms.WriteInt(0x00);
                }
                else if (entity.Type == ColorBits.LINK)
                {
                    ms.WriteInt(Album.List.IndexOf(entity.Target));
                }
                else
                {
                    ms.WriteInt(entity.Width);
                    ms.WriteInt(entity.Height);
                    ms.WriteInt(entity.Length);
                    ms.WriteInt(entity.X);
                    ms.WriteInt(entity.Y);
                    ms.WriteInt(entity.Canvas_Width);
                    ms.WriteInt(entity.Canvas_Height);
                }
            }
            ms.Close();
            var Index_Data = ms.ToArray();

            Album.Info_Length = Index_Data.Length;
            Album.Length      = 44;
            ms = new MemoryStream();
            foreach (var entity in Album.List)
            {
                var index = Map[entity];
                var dds   = index.DDS;
                if (entity.IsOpen)
                {
                    dds = DDS.CreateFromBitmap(entity.Picture, entity.Compress);
                }
                if (!Map.ContainsValue(index))
                {
                    dds.Index     = Map.Count;
                    Map[entity]   = index;
                    Album.Length += dds.Size;
                }
            }
            ms.WriteInt(Map.Count);
            Album.Length += 28 * Map.Count + 64 * Album.List.Count;
            ms.WriteInt(Album.Length);
            var table = Album.CurrentTable.ToArray();

            ms.WriteInt(table.Length);
            Colors.WritePalette(ms, table);
            var list = new List <DDS>();

            foreach (var index in Map.Values)
            {
                var dds = index.DDS;
                if (list.Contains(dds))
                {
                    continue;
                }
                ms.WriteInt((int)dds.Version);
                ms.WriteInt((int)dds.Type);
                ms.WriteInt(dds.Index);
                ms.WriteInt(dds.Size);
                ms.WriteInt(dds.DDS_Size);
                ms.WriteInt(dds.Width);
                ms.WriteInt(dds.Height);
                list.Add(dds);
            }
            ms.Write(Index_Data);
            ms.Close();
            Index_Data = ms.ToArray();
            return(Index_Data);
        }