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