private static void ReadFRMS(tTexture lcTex, BinaryReader b) { int num = (int) lcTex.Header.Width * (int) lcTex.Header.Height; int count = (int) lcTex.Header.Bits == 0 || (int) lcTex.Header.Bits == 2 ? num * 3 : num * 4; lcTex.imageData = new byte[ lcTex.Header.MipMap][]; for (int index = 0; index < lcTex.Header.MipMap; ++index) lcTex.imageData[index] = b.ReadBytes(count); }
public static void ReadFile(string FileName) { ASCIIEncoding asciiEncoding = new ASCIIEncoding(); FileStream fileStream = new FileStream(FileName, FileMode.Open); BinaryReader b = new BinaryReader( fileStream); Tex.lcTex = new tTexture(); Tex.lcTex.Header = new tHeader(); Tex.lcTex.Header.VersionChunk = b.ReadBytes(4); Tex.lcTex.Header.Version = b.ReadInt32(); Tex.lcTex.Header.DataChunk = b.ReadBytes(4); Tex.lcTex.Header.Width = b.ReadUInt32() ^ 303316286U; Tex.lcTex.Header.Shift = b.ReadUInt32() ^ 1431797889U; Tex.lcTex.Header.Height = b.ReadUInt32() ^ 2560279492U; Tex.lcTex.Header.MipMap = b.ReadUInt32() ^ 3688695303U; Tex.lcTex.Header.Bits = b.ReadUInt32() ^ 505432394U; Tex.lcTex.Header.Unknown = b.ReadUInt32() ^ 1633913997U; Tex.lcTex.Header.Format = asciiEncoding.GetString(b.ReadBytes(4)); Tex.lcTex.Header.AnimOffset = b.ReadInt32(); Tex.lcTex.Header.Width = Tex.Shift(Tex.lcTex.Header.Width, Tex.lcTex.Header.Shift); Tex.lcTex.Header.Height = Tex.Shift(Tex.lcTex.Header.Height, Tex.lcTex.Header.Shift); if (Tex.lcTex.Header.Format == "FRMC") Tex.ReadFRMC(Tex.lcTex, b); else if (Tex.lcTex.Header.Format == "FRMS") Tex.ReadFRMS(Tex.lcTex, b); fileStream.Close(); }
private static void ReadFRMC(tTexture lcTex, BinaryReader b) { if (lcTex.Header.MipMap > int.MaxValue) return; lcTex.imageData = new byte[ lcTex.Header.MipMap][]; for (int index = 0; index < lcTex.Header.MipMap; ++index) lcTex.imageData[index] = b.ReadBytes(b.ReadInt32()); }