Esempio n. 1
0
        private static void TagEquals(SwfTag tag1, SwfTag tag2, string msg)
        {
            var data1 = tag1.GetData();
            var data2 = tag2.GetData();

            Assert.AreEqual(data1, data2, msg);
        }
Esempio n. 2
0
        public void Parse(byte[] data)
        {
            {
                SwfHeader header;
                RawData = SwfHeader.GetHeader(data, out header);
                Header  = header;
            }


            int offset = Header.HeaderLength;

            Tags = new List <SwfTag>();
            while (true)
            {
                SwfTag tag = GetTag(RawData, offset);

                if (tag == null)
                {
                    break;
                }

                Tags.Add(tag);
                offset += tag.Length;
            }
        }
Esempio n. 3
0
 private static Image HandleImageTag(SwfTag tag)
 {
     return(tag.Code switch
     {
         SwfTagCode.DefineBitsLossless => HandleLossless(tag, false),
         SwfTagCode.DefineBitsLossless2 => HandleLossless(tag, true),
         SwfTagCode.DefineBitsJpeg3 => HandleJpeg3(tag),
         SwfTagCode.DefineBitsJpeg2 => HandleJpeg2(tag),
         _ => throw new Exception($"Didn't handle code type {tag.Code}"),
     });
Esempio n. 4
0
        private static void CheckCharacter(SwfTag tag)
        {
            if (tag == null)
            {
                throw new ArgumentNullException("tag");
            }
            var obj = tag as ISwfCharacter;

            if (obj == null)
            {
                throw Errors.SWF.TagIsNotCharacter.CreateException();
            }
        }
Esempio n. 5
0
        private void AddImport(SwfTag tag, SwfTag mytag)
        {
            tag.ImportedTag = mytag;
            //_importMap[tag] = mytag;

            //NOTE: Definition tags (such as DefineShape) are not allowed in the DefineSprite tag. All of the
            //characters that control tags refer to in the sprite must be defined in the main body of the file
            //before the sprite is defined.
            if (_spriteStack.Count > 0 && !SwfTag.IsCharacter(mytag.TagCode))
            {
                var sprite = _spriteStack.Peek();
                sprite.Tags.Add(mytag);
            }
            else
            {
                Tags.Add(mytag);
            }
        }
Esempio n. 6
0
        internal static SwfTag GetTag(byte[] data, int offset)
        {
            switch (SwfTag.GetTagCode(data, offset))
            {
            case TagType.DefineBits:
                return(new DefineBits(data, offset));

            case TagType.DefineBitsJPEG2:
                return(new DefineBitsJPEG2(data, offset));

            case TagType.DefineBitsJPEG3:
                return(new DefineBitsJPEG3(data, offset));

            case TagType.DefineBitsLossless:
                return(new DefineBitsLossless(data, offset));

            case TagType.DefineBitsLossless2:
                return(new DefineBitsLossless2(data, offset));


            case TagType.DefineSound:
                return(new DefineSound(data, offset));


            case TagType.PlaceObject2:
                return(new PlaceObject2(data, offset));

            case TagType.DefineShape:
                return(new DefineShape(data, offset));


            case TagType.DefineSprite:
                return(new DefineSprite(data, offset));

            case TagType.DefineBinaryData:
                return(new DefineBinaryData(data, offset));

            case TagType.End:
                return(null);

            default:
                return(new UndefinedTag(data, offset));
            }
        }
Esempio n. 7
0
        private static void TestReadWriteShapes(string resname)
        {
            var rs = typeof(SwfIOTest).GetResourceStream(resname);

            if (rs == null)
            {
                return;
            }

            var ms = rs.ToMemoryStream();

            var swf1 = new SwfMovie(ms, SwfTagDecodeOptions.DonotDecodeTags);

            ms.Position = 0;

            var swf2 = new SwfMovie(ms);

            Assert.AreEqual(swf1.Tags.Count, swf2.Tags.Count, resname + "#count");
            int n = swf1.Tags.Count;

            for (int i = 0; i < n; ++i)
            {
                var tag1 = swf1.Tags[i];
                var tag2 = swf2.Tags[i];
                if (SwfTag.IsShape(tag1.TagCode))
                {
                    string msg;
                    var    c = tag2 as ISwfCharacter;
                    if (c != null)
                    {
                        msg = string.Format("{0}, #{1}, {2}, {3} - {4}",
                                            resname, i, tag1.TagCode, c.CharacterId, c.Name);
                    }
                    else
                    {
                        msg = string.Format("{0}, #{1}, {2}",
                                            resname, i, tag1.TagCode);
                    }

                    TagEquals(tag1, tag2, msg);
                }
            }
        }
Esempio n. 8
0
        public SwfTag Import(SwfMovie from, SwfTag tag)
        {
            if (from == null)
            {
                throw new ArgumentNullException("from");
            }
            if (tag == null)
            {
                throw new ArgumentNullException("tag");
            }

            var mytag = GetImportedTag(tag);

            if (mytag != null)
            {
                Debug.Assert(Tags.Contains(mytag));
                return(mytag);
            }

            if (tag.TagCode == SwfTagCode.DefineSprite)
            {
                var sprite = tag as SwfSprite;
                if (sprite == null)
                {
                    throw new InvalidOperationException();
                }
                return(ImportSprite(from, sprite));
            }

            mytag = tag.Clone();
            mytag.ImportDependencies(from, this);

            var obj = mytag as ISwfCharacter;

            if (obj != null)
            {
                obj.CharacterId = NewCharacterID();
            }

            AddImport(tag, mytag);

            return(mytag);
        }
Esempio n. 9
0
 private static SwfTag GetImportedTag(SwfTag tag)
 {
     //return _importMap[tag] as SwfTag;
     return(tag.ImportedTag);
 }