public static EPFImage FromArchive(string file, DATArchive archive) { if (!archive.Contains(file, true)) { return((EPFImage)null); } return(EPFImage.FromRawData(archive.ExtractFile(file, true), file)); }
public static EPFImage FromArchive(string fileName, bool ignoreCase, DATArchive archive) { int index1 = archive.IndexOf(fileName, true); if (index1 == -1) { return((EPFImage)null); } using (FileStream fileStream = File.Open(archive.FileName, FileMode.Open, FileAccess.Read, FileShare.Read)) { using (BinaryReader binaryReader = new BinaryReader((Stream)fileStream)) { EPFImage epfImage = new EPFImage(); epfImage.Name = Path.GetFileName(fileName).ToLower(); fileStream.Seek(archive.Files[index1].StartAddress, SeekOrigin.Begin); epfImage.expectedFrames = (int)binaryReader.ReadUInt16(); epfImage.width = (int)binaryReader.ReadUInt16(); epfImage.height = (int)binaryReader.ReadUInt16(); epfImage.unknown = (int)binaryReader.ReadUInt16(); epfImage.tocAddress = (long)(binaryReader.ReadUInt32() + 12U); if (epfImage.ExpectedFrames <= 0) { return((EPFImage)null); } epfImage.frames = new EPFFrame[epfImage.ExpectedFrames]; for (int index2 = 0; index2 < epfImage.ExpectedFrames; ++index2) { binaryReader.BaseStream.Seek(archive.Files[index1].StartAddress + epfImage.TOCAddress + (long)(index2 * 16), SeekOrigin.Begin); int top = (int)binaryReader.ReadUInt16(); int left = (int)binaryReader.ReadUInt16(); int num1 = (int)binaryReader.ReadUInt16(); int width = (int)binaryReader.ReadUInt16() - left; int height = num1 - top; uint num2 = binaryReader.ReadUInt32() + 12U; uint num3 = binaryReader.ReadUInt32() + 12U; binaryReader.BaseStream.Seek(archive.Files[index1].StartAddress + (long)num2, SeekOrigin.Begin); byte[] rawData = (long)(num3 - num2) == (long)(width * height) ? binaryReader.ReadBytes((int)num3 - (int)num2) : binaryReader.ReadBytes((int)(epfImage.TOCAddress - (long)num2)); epfImage.Frames[index2] = new EPFFrame(left, top, width, height, rawData); } return(epfImage); } } }
private static EPFImage LoadEPF(Stream stream, string name) { stream.Seek(0L, SeekOrigin.Begin); BinaryReader binaryReader = new BinaryReader(stream); EPFImage epfImage = new EPFImage(); if (name != null || name != string.Empty) { epfImage.Name = Path.GetFileName(name).ToLower(); } epfImage.expectedFrames = (int)binaryReader.ReadUInt16(); epfImage.width = (int)binaryReader.ReadUInt16(); epfImage.height = (int)binaryReader.ReadUInt16(); epfImage.unknown = (int)binaryReader.ReadUInt16(); epfImage.tocAddress = (long)(binaryReader.ReadUInt32() + 12U); if (epfImage.expectedFrames <= 0) { return((EPFImage)null); } epfImage.frames = new EPFFrame[epfImage.expectedFrames]; for (int index = 0; index < epfImage.expectedFrames; ++index) { binaryReader.BaseStream.Seek(epfImage.tocAddress + (long)(index * 16), SeekOrigin.Begin); int top = (int)binaryReader.ReadUInt16(); int left = (int)binaryReader.ReadUInt16(); int num1 = (int)binaryReader.ReadUInt16(); int width = (int)binaryReader.ReadUInt16() - left; int height = num1 - top; uint num2 = binaryReader.ReadUInt32() + 12U; uint num3 = binaryReader.ReadUInt32() + 12U; binaryReader.BaseStream.Seek((long)num2, SeekOrigin.Begin); byte[] rawData = (long)(num3 - num2) == (long)(width * height) ? binaryReader.ReadBytes((int)num3 - (int)num2) : binaryReader.ReadBytes((int)(epfImage.tocAddress - (long)num2)); epfImage.frames[index] = new EPFFrame(left, top, width, height, rawData); } return(epfImage); }
public static EPFImage FromRawData(byte[] data, string name) { return(EPFImage.LoadEPF((Stream) new MemoryStream(data), name)); }
public static EPFImage FromFile(string file) { return(EPFImage.LoadEPF((Stream) new FileStream(file, FileMode.Open, FileAccess.Read, FileShare.Read), file)); }