Esempio n. 1
0
        public override Stream OpenEntry(ArcFile arc, Entry entry)
        {
            var ani = (AniEntry)entry;

            byte[] key_frame = null;
            if (ani.KeyFrame != ani.FrameIndex)
            {
                var dir = (List <Entry>)arc.Dir;
                for (int i = ani.KeyFrame; i < ani.FrameIndex; ++i)
                {
                    var frame = dir[i];
                    using (var s = arc.File.CreateStream(frame.Offset, frame.Size))
                    {
                        var frame_info = Cg.ReadMetaData(s) as CgMetaData;
                        if (null == frame_info)
                        {
                            break;
                        }
                        using (var reader = new CgFormat.Reader(s, frame_info, key_frame))
                        {
                            reader.Unpack();
                            key_frame = reader.Data;
                        }
                    }
                }
            }
            var        input = arc.File.CreateStream(entry.Offset, entry.Size);
            CgMetaData info  = null;

            try
            {
                info = Cg.ReadMetaData(input) as CgMetaData;
            }
            catch
            {
                input.Dispose();
                throw;
            }
            if (null == info)
            {
                input.Position = 0;
                return(input);
            }
            using (input)
                using (var reader = new CgFormat.Reader(input, info, key_frame))
                {
                    reader.Unpack();
                    return(TgaStream.Create(info, reader.Data));
                }
        }
Esempio n. 2
0
        public override IImageDecoder OpenImage(ArcFile arc, Entry entry)
        {
            var ani = (AniEntry)entry;

            byte[] key_frame = null;
            if (ani.KeyFrame != ani.FrameIndex)
            {
                var dir = (List <Entry>)arc.Dir;
                for (int i = ani.KeyFrame; i < ani.FrameIndex; ++i)
                {
                    var frame = dir[i];
                    using (var s = arc.File.CreateStream(frame.Offset, frame.Size))
                    {
                        var frame_info = Cg.ReadMetaData(s) as CgMetaData;
                        if (null == frame_info)
                        {
                            break;
                        }
                        using (var reader = new CgFormat.Reader(s, frame_info, key_frame))
                        {
                            reader.Unpack();
                            key_frame = reader.Data;
                        }
                    }
                }
            }
            var input = arc.File.CreateStream(entry.Offset, entry.Size);

            try
            {
                var info = Cg.ReadMetaData(input) as CgMetaData;
                if (null == info)
                {
                    throw new InvalidFormatException();
                }
                return(new CgFormat.Reader(input, info, key_frame));
            }
            catch
            {
                input.Dispose();
                throw;
            }
        }
Esempio n. 3
0
 public override Stream OpenEntry(ArcFile arc, Entry entry)
 {
     var ani = (AniEntry)entry;
     byte[] key_frame = null;
     if (ani.KeyFrame != ani.FrameIndex)
     {
         var dir = (List<Entry>)arc.Dir;
         for (int i = ani.KeyFrame; i < ani.FrameIndex; ++i)
         {
             var frame = dir[i];
             using (var s = arc.File.CreateStream (frame.Offset, frame.Size))
             {
                 var frame_info = Cg.ReadMetaData (s) as CgMetaData;
                 if (null == frame_info)
                     break;
                 using (var reader = new CgFormat.Reader (s, frame_info, key_frame))
                 {
                     reader.Unpack();
                     key_frame = reader.Data;
                 }
             }
         }
     }
     var input = arc.File.CreateStream (entry.Offset, entry.Size);
     CgMetaData info = null;
     try
     {
         info = Cg.ReadMetaData (input) as CgMetaData;
     }
     catch
     {
         input.Dispose();
         throw;
     }
     if (null == info)
     {
         input.Position = 0;
         return input;
     }
     using (input)
     using (var reader = new CgFormat.Reader (input, info, key_frame))
     {
         reader.Unpack();
         return TgaStream.Create (info, reader.Data);
     }
 }