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