Ejemplo n.º 1
0
        protected ShockwaveFlash(FlashReader input)
            : this(false)
        {
            Compression = (CompressionKind)input.ReadString(3)[0];
            Version     = input.ReadByte();
            FileLength  = input.ReadUInt32();

            switch (Compression)
            {
            case CompressionKind.LZMA:
            {
                byte[] decompressed = LZMA.Decompress(input.BaseStream, ((int)FileLength - 8));
                _input = new FlashReader(decompressed);
                break;
            }

            case CompressionKind.ZLIB:
            {
                _input = ZLIB.WrapDecompressor(input.BaseStream);
                break;
            }

            case CompressionKind.None:
            {
                _input = input;
                break;
            }
            }
            Frame = new FrameRecord(_input);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Initializes a new instance of the <see cref="ShockwaveFlash"/> class based on the specified array of bytes.
        /// </summary>
        /// <param name="data">The data containing the raw Shockwave Flash(SWF) file.</param>
        public ShockwaveFlash(byte[] data)
        {
            _flashData = data;
            _abcFiles  = new List <ABCFile>();

            Reader     = new FlashReader(data);
            Tags       = new List <FlashTag>();
            Dictionary = new FlashDictionary();

            Signature    = Reader.ReadString(3);
            CompressWith = (CompressionStandard)Signature[0];

            Version    = Reader.ReadByte();
            FileLength = Reader.ReadUInt32();

            if (CompressWith ==
                CompressionStandard.None)
            {
                ReadFrameInformation();
            }
            else
            {
                IsCompressed = true;
            }
        }
Ejemplo n.º 3
0
        public void ReadConstants()
        {
            _integers.Capacity = _reader.Read7BitEncodedInt();
            if (_integers.Capacity > 0)
            {
                _integers.Add(0);
                for (int i = 1; i < _integers.Capacity; i++)
                {
                    _integers.Add(_reader.Read7BitEncodedInt());
                }
            }

            _uintegers.Capacity = _reader.Read7BitEncodedInt();
            if (_uintegers.Capacity > 0)
            {
                _uintegers.Add(0);
                for (int i = 1; i < _uintegers.Capacity; i++)
                {
                    _uintegers.Add((uint)_reader.Read7BitEncodedInt());
                }
            }

            _doubles.Capacity = _reader.Read7BitEncodedInt();
            if (_doubles.Capacity > 0)
            {
                _doubles.Add(double.NaN);
                for (int i = 1; i < _doubles.Capacity; i++)
                {
                    _doubles.Add(_reader.ReadDouble());
                }
            }

            _strings.Capacity = _reader.Read7BitEncodedInt();
            if (_strings.Capacity > 0)
            {
                _strings.Add(string.Empty);
                for (int i = 1; i < _strings.Capacity; i++)
                {
                    _strings.Add(_reader.ReadString());
                }
            }

            _namespaces.Capacity = _reader.Read7BitEncodedInt();
            if (_namespaces.Capacity > 0)
            {
                _namespaces.Add(null);
                for (int i = 1; i < _namespaces.Capacity; i++)
                {
                    _namespaces.Add(new ASNamespace(ABC, _reader));
                }
            }

            _namespaceSets.Capacity = _reader.Read7BitEncodedInt();
            if (_namespaceSets.Capacity > 0)
            {
                _namespaceSets.Add(null);
                for (int i = 1; i < _namespaceSets.Capacity; i++)
                {
                    _namespaceSets.Add(new ASNamespaceSet(ABC, _reader));
                }
            }

            _multinames.Capacity = _reader.Read7BitEncodedInt();
            if (_multinames.Capacity > 0)
            {
                _multinames.Add(null);
                for (int i = 1; i < _multinames.Capacity; i++)
                {
                    _multinames.Add(new ASMultiname(ABC, _reader));
                }
            }
        }