示例#1
0
        public List <byte[]> GetRawAbcFiles()
        {
            var list = new List <byte[]>();

            int n = Tags.Count;

            for (int i = 0; i < n; ++i)
            {
                var tag = Tags[i];
                if (tag.TagCode == SwfTagCode.DoAbc)
                {
                    var data = tag.GetData();
                    list.Add(data);
                }
                else if (tag.TagCode == SwfTagCode.DoAbc2)
                {
                    var data = tag.GetData();
                    using (var reader = new SwfReader(data))
                    {
                        reader.FileVersion = Version;
                        reader.ReadUInt32(); //flags
                        reader.ReadString(); //frame name
                        var abc = reader.ReadToEnd();
                        list.Add(abc);
                    }
                }
            }
            return(list);
        }
示例#2
0
        public static SwfEventFlags ReadFlags(SwfReader reader)
        {
            int  ver = reader.FileVersion;
            uint v   = ver >= 6 ? reader.ReadUInt32() : reader.ReadUInt16();

            return(ToFlags(v, ver));
        }
示例#3
0
        //WARNING: Reads without event flags
        /// <summary>
        ///
        /// </summary>
        /// <param name="reader"></param>
        public void Read(SwfReader reader)
        {
            uint len = reader.ReadUInt32();

            if ((Flags & SwfEventFlags.KeyPress) != 0)
            {
                KeyCode = reader.ReadUInt8();
            }
            //TODO: use len
            _actions.Read(reader);
        }
示例#4
0
        /// <summary>
        /// Loads flash movie from specified stream.
        /// </summary>
        /// <param name="input">input stream to load.</param>
        /// <param name="options">options to decode tags.</param>
        public void Load(Stream input, SwfTagDecodeOptions options)
        {
            var reader = new SwfReader(input)
            {
                TagDecodeOptions = options
            };

            //File Header
            var sig = reader.ReadASCII(3);

            // "FWS" or "CWS" for ZLIB compressed files (v6.0 or later)
            if (sig != "FWS" && sig != "CWS" && sig != "ZWS")
            {
                throw new BadImageFormatException("Not a valid SWF (Flash) file signature");
            }

            _version           = reader.ReadUInt8(); // file version
            reader.FileVersion = _version;
            uint fileLength = reader.ReadUInt32();   // file length

            //Debug.WriteLine(string.Format("SWF File Length = {0}", fileLength));

            // If the file is compressed, this is where the ZLIB decompression ("inflate") begins
            if (sig[0] == 'C')
            {
                reader.Stream = Zip.Uncompress(input);
            }
            else if (sig[0] == 'Z')             // LZMA since v13
            {
                // reader.Stream = new MemoryStream(Compression.Lzma.Decompress(input));
                throw new NotImplementedException();
            }

            //Movie Header
            var frameSize = reader.ReadRect();

            _frameSize.Width  = frameSize.Width.FromTwips();
            _frameSize.Height = frameSize.Height.FromTwips();
            _frameRate        = reader.ReadFixed16();
            _frameCount       = reader.ReadUInt16();

            //Movie Content
            _tags.Read(reader);
        }
示例#5
0
        public void Read(SwfReader reader)
        {
            reader.ReadUInt16();             //reserved
            AllEventFlags = SwfEvent.ReadFlags(reader);

            int ver = reader.FileVersion;

            while (true)
            {
                uint flags = ver >= 6 ? reader.ReadUInt32() : reader.ReadUInt16();
                if (flags == 0)
                {
                    break;
                }
                var e = new SwfEvent {
                    Flags = SwfEvent.ToFlags(flags, ver)
                };
                e.Read(reader);
            }
        }