Пример #1
0
 public static EPFImage FromArchive(string file, DATArchive archive)
 {
     if (!archive.Contains(file, true))
     {
         return((EPFImage)null);
     }
     return(EPFImage.FromRawData(archive.ExtractFile(file, true), file));
 }
Пример #2
0
        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);
                }
            }
        }
Пример #3
0
        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);
        }
Пример #4
0
 public static EPFImage FromRawData(byte[] data, string name)
 {
     return(EPFImage.LoadEPF((Stream) new MemoryStream(data), name));
 }
Пример #5
0
 public static EPFImage FromFile(string file)
 {
     return(EPFImage.LoadEPF((Stream) new FileStream(file, FileMode.Open, FileAccess.Read, FileShare.Read), file));
 }