public static void Read(BinaryReader b, ref GafSequenceHeader entry) { entry.FrameCount = b.ReadUInt16(); entry.Unknown1 = b.ReadUInt16(); entry.Unknown2 = b.ReadUInt32(); entry.Name = Util.ConvertChars(b.ReadBytes(32)); }
public void BeginEntry(ref Gaf.Structures.GafSequenceHeader entry) { entries.Add(new GafSequenceJson { Frames = new List <GafFrameJson>(), Name = entry.Name }); var entryNumber = entries.Count; Directory.CreateDirectory(Path.Combine(outputDirectory, $"{entryNumber:D2}_{entry.Name}")); }
private void WriteGafEntry(List <WrittenImageInfo> imageInfos, GafEntryInfo entryInfo) { var header = new Structures.GafSequenceHeader { FrameCount = (ushort)entryInfo.FrameInfos.Count, Unknown1 = 1, Unknown2 = 0, Name = entryInfo.Name }; header.Write(writer); // reserve space for frame pointers var framePointersPosition = writer.BaseStream.Position; foreach (var _ in entryInfo.FrameInfos) { var entry = new Structures.GaFrameListItem { PtrFrameInfo = 0, Duration = 0, }; entry.Write(writer); } // write frames var pointers = new List <long>(); foreach (var frameInfo in entryInfo.FrameInfos) { pointers.Add(writer.BaseStream.Position); WriteFrameInfo(imageInfos, frameInfo); } // go back and write frame pointers var currPos = writer.BaseStream.Position; writer.BaseStream.Seek(framePointersPosition, SeekOrigin.Begin); // write pointers for (var i = 0; i < entryInfo.FrameInfos.Count; ++i) { var entry = new Structures.GaFrameListItem { PtrFrameInfo = (uint)pointers[i], Duration = (uint)entryInfo.FrameInfos[i].Duration, }; entry.Write(writer); } // reset to end writer.BaseStream.Seek(currPos, SeekOrigin.Begin); }
private void ReadGafEntry() { // read the entry header Structures.GafSequenceHeader entry = new Structures.GafSequenceHeader(); Structures.GafSequenceHeader.Read(this.reader, ref entry); this.adapter.BeginEntry(ref entry); // read in all the frame entry pointers Structures.GaFrameListItem[] frameEntries = new Structures.GaFrameListItem[entry.FrameCount]; for (int i = 0; i < entry.FrameCount; i++) { Structures.GaFrameListItem.Read(this.reader, ref frameEntries[i]); } // read in the corresponding frames for (int i = 0; i < entry.FrameCount; i++) { this.reader.BaseStream.Seek(frameEntries[i].PtrFrameInfo, SeekOrigin.Begin); this.LoadFrame(ref frameEntries[i]); } this.adapter.EndEntry(); }