private void ReadHeaderInfo(EndiannessAwareBinaryReader reader) { MagicBytes = reader.ReadBytes(4, ByteOrder.LittleEndian); if (!IsValidPAC) { return; } HeaderSize = reader.ReadUInt32(); FileLength = reader.ReadUInt32(); FileCount = reader.ReadUInt32(); Parameters = (PACParameters)reader.ReadInt32(); FileNameLength = reader.ReadInt32(); reader.BaseStream.Seek(8, SeekOrigin.Current); }
public Bitmap GetImage() { var initstream = GetReadStream(); var reader = new EndiannessAwareBinaryReader(initstream, Encoding.Default, true, Endianness); try { var savpos = reader.BaseStream.Position; if (reader.ReadInt32(ByteOrder.LittleEndian) == 0x73676573) { Endianness = ByteOrder.BigEndian; reader.BaseStream.Seek(-4, SeekOrigin.Current); reader.Close(); reader.Dispose(); reader = new EndiannessAwareBinaryReader( SEGSCompression.DecompressStream(initstream, Endianness), Endianness); } else { reader.BaseStream.Seek(12, SeekOrigin.Current); if (reader.BaseStream.Position != reader.BaseStream.Length) { if (reader.ReadInt32(ByteOrder.LittleEndian) == 0x73676573) { Endianness = ByteOrder.BigEndian; reader.BaseStream.Seek(-4, SeekOrigin.Current); reader.Close(); reader.Dispose(); reader = new EndiannessAwareBinaryReader( SEGSCompression.DecompressStream(initstream, Endianness), Endianness); } else { reader.BaseStream.Seek(-20, SeekOrigin.Current); } } else { reader.BaseStream.Position = savpos; } } if (!endiannessChecked) { CheckEndianness(reader.ReadBytes(4)); reader.ChangeEndianness(Endianness); reader.BaseStream.Seek(-4, SeekOrigin.Current); } using (var memStream = new MemoryStream()) { reader.BaseStream.CopyTo(memStream); var ddsImage = new DDSImage(memStream.ToArray(), Endianness); if (ddsImage.BitmapImage == null) { return(null); } return(ddsImage.BitmapImage); } } catch { return(null); } finally { reader.Close(); reader.Dispose(); initstream.Close(); initstream.Dispose(); } }