Пример #1
0
 public static RemoveObjectTag Create(SwfStreamReader reader)
 {
     return(new RemoveObjectTag {
         CharacterId = reader.ReadUInt16(),
         Depth = reader.ReadUInt16()
     });
 }
Пример #2
0
 public static ScriptLimitsTag Create(SwfStreamReader reader)
 {
     return(new ScriptLimitsTag {
         MaxRecursionDepth = reader.ReadUInt16(),
         ScriptTimeoutSeconds = reader.ReadUInt16()
     });
 }
Пример #3
0
        public static DefineSpriteTag Create(SwfStreamReader reader)
        {
            var tag = new DefineSpriteTag();

            tag.SpriteId    = reader.ReadUInt16();
            tag.FrameCount  = reader.ReadUInt16();
            tag.ControlTags = SwfControlTags.Read(reader);
            return(tag);
        }
Пример #4
0
        public static PlaceObjectTag Create(SwfStreamReader reader)
        {
            var tag = new PlaceObjectTag();

            tag.CharacterId    = reader.ReadUInt16();
            tag.Depth          = reader.ReadUInt16();
            tag.Matrix         = SwfMatrix.Read(reader);
            tag.ColorTransform = reader.IsEOF
                                ? SwfColorTransform.identity
                                : SwfColorTransform.Read(reader, false);
            return(tag);
        }
Пример #5
0
        public static DefineBitsLosslessTag Create(SwfStreamReader reader)
        {
            var tag = new DefineBitsLosslessTag();

            tag.CharacterId  = reader.ReadUInt16();
            tag.BitmapFormat = reader.ReadByte();
            tag.BitmapWidth  = reader.ReadUInt16();
            tag.BitmapHeight = reader.ReadUInt16();
            if (tag.BitmapFormat == 3)
            {
                tag.BitmapColorTableSize = (ushort)(reader.ReadByte() + 1);
            }
            tag.ZlibBitmapData = reader.ReadRest();
            return(tag);
        }
        protected IEnumerable<TagBinaryInfo> GetTagFullBinariesFromSwfResource(string resourceName)
        {
            var file = new SwfFile();
            var stream = OpenEmbeddedResource(resourceName);
            SwfStreamReader reader = new SwfStreamReader(stream);
            file.FileInfo = reader.ReadSwfFileInfo();
            stream = DecompressIfNeeded(file.FileInfo, stream);
            stream.Seek(8, SeekOrigin.Begin);
            reader = new SwfStreamReader(stream);
            file.Header = reader.ReadSwfHeader();

            while (stream.Position < stream.Length) {
                var position = stream.Position;

                ushort typeAndSize = reader.ReadUInt16();
                SwfTagType type = (SwfTagType)(typeAndSize >> 6);
                int shortSize = typeAndSize & 0x3f;
                int size = shortSize < 0x3f ? shortSize : reader.ReadInt32();

                var length = stream.Position - position + size;

                stream.Seek(position, SeekOrigin.Begin);
                yield return new TagBinaryInfo { Type = type, Binary = reader.ReadBytes((int)length) };
            }
        }
        static void SkipLine2Style(SwfStreamReader reader)
        {
            reader.ReadUInt16();                      // Width
            reader.ReadUnsignedBits(2);               // StartCapStyle
            var join_style    = reader.ReadUnsignedBits(2);
            var has_fill_flag = reader.ReadBit();

            reader.ReadBit();                         // NoHScaleFlag
            reader.ReadBit();                         // NoVScaleFlag
            reader.ReadBit();                         // PixelHintingFlag
            reader.ReadUnsignedBits(5);               // Reserved
            reader.ReadBit();                         // NoClose
            reader.ReadUnsignedBits(2);               // EndCapStyle
            if (join_style == 2)
            {
                reader.ReadFixedPoint_8_8();                 // MiterLimitFactor
            }
            if (has_fill_flag)
            {
                ReadFillStyle(reader, true);                 // FillStyle
            }
            else
            {
                SwfColor.Read(reader, true);
            }
        }
Пример #8
0
        public static ExportAssetsTag Create(SwfStreamReader reader)
        {
            var asset_tag_count = reader.ReadUInt16();
            var asset_tags      = new List <AssetTagData>(asset_tag_count);

            for (var i = 0; i < asset_tag_count; ++i)
            {
                asset_tags.Add(new AssetTagData {
                    Tag  = reader.ReadUInt16(),
                    Name = reader.ReadString()
                });
            }
            return(new ExportAssetsTag {
                AssetTags = asset_tags
            });
        }
Пример #9
0
        protected IEnumerable <TagBinaryInfo> GetTagFullBinariesFromSwfResource(string resourceName)
        {
            var             file   = new SwfFile();
            var             stream = OpenEmbeddedResource(resourceName);
            SwfStreamReader reader = new SwfStreamReader(stream);

            file.FileInfo = reader.ReadSwfFileInfo();
            stream        = DecompressIfNeeded(file.FileInfo, stream);
            stream.Seek(8, SeekOrigin.Begin);
            reader      = new SwfStreamReader(stream);
            file.Header = reader.ReadSwfHeader();

            while (stream.Position < stream.Length)
            {
                var position = stream.Position;

                ushort     typeAndSize = reader.ReadUInt16();
                SwfTagType type        = (SwfTagType)(typeAndSize >> 6);
                int        shortSize   = typeAndSize & 0x3f;
                int        size        = shortSize < 0x3f ? shortSize : reader.ReadInt32();

                var length = stream.Position - position + size;

                stream.Seek(position, SeekOrigin.Begin);
                yield return(new TagBinaryInfo {
                    Type = type, Binary = reader.ReadBytes((int)length)
                });
            }
        }
Пример #10
0
        public static SymbolClassTag Create(SwfStreamReader reader)
        {
            var symbol_tag_count = reader.ReadUInt16();
            var symbol_tags      = new List <SymbolTagData>(symbol_tag_count);

            for (var i = 0; i < symbol_tag_count; ++i)
            {
                symbol_tags.Add(new SymbolTagData {
                    Tag  = reader.ReadUInt16(),
                    Name = reader.ReadString()
                });
            }
            return(new SymbolClassTag {
                SymbolTags = symbol_tags
            });
        }
Пример #11
0
        public static DefineShape2Tag Create(SwfStreamReader reader)
        {
            var tag = new DefineShape2Tag();

            tag.ShapeId     = reader.ReadUInt16();
            tag.ShapeBounds = SwfRect.Read(reader);
            tag.Shapes      = SwfShapesWithStyle.Read(reader, SwfShapesWithStyle.ShapeStyleType.Shape2);
            return(tag);
        }
Пример #12
0
 public static SwfLongHeader Read(SwfStreamReader reader)
 {
     return(new SwfLongHeader {
         ShortHeader = SwfShortHeader.Read(reader),
         FrameSize = SwfRect.Read(reader),
         FrameRate = reader.ReadFixedPoint_8_8(),
         FrameCount = reader.ReadUInt16()
     });
 }
        public static PlaceObject2Tag Create(SwfStreamReader reader)
        {
            var tag = new PlaceObject2Tag();

            tag.HasClipActions    = reader.ReadBit();
            tag.HasClipDepth      = reader.ReadBit();
            tag.HasName           = reader.ReadBit();
            tag.HasRatio          = reader.ReadBit();
            tag.HasColorTransform = reader.ReadBit();
            tag.HasMatrix         = reader.ReadBit();
            tag.HasCharacter      = reader.ReadBit();
            tag.Move  = reader.ReadBit();
            tag.Depth = reader.ReadUInt16();

            tag.CharacterId = tag.HasCharacter
                                ? reader.ReadUInt16()
                                : (ushort)0;

            tag.Matrix = tag.HasMatrix
                                ? SwfMatrix.Read(reader, false)
                                : SwfMatrix.identity;

            tag.ColorTransform = tag.HasColorTransform
                                ? SwfColorTransform.Read(reader, true)
                                : SwfColorTransform.identity;

            tag.Ratio = tag.HasRatio
                                ? reader.ReadUInt16()
                                : (ushort)0;

            tag.Name = tag.HasName
                                ? reader.ReadString()
                                : string.Empty;

            tag.ClipDepth = tag.HasClipDepth
                                ? reader.ReadUInt16()
                                : (ushort)0;

            tag.ClipActions = tag.HasClipActions
                                ? SwfClipActions.Read(reader)
                                : SwfClipActions.identity;

            return(tag);
        }
Пример #14
0
        public static EnableTelemetryTag Create(SwfStreamReader reader)
        {
            reader.ReadUInt16();             // reserved
            var sha256 = reader.IsEOF
                                ? new byte[0]
                                : reader.ReadBytes(32);

            return(new EnableTelemetryTag {
                SHA256PasswordHash = sha256
            });
        }
Пример #15
0
        public override ushort ReadUInt16()
        {
            var a = _first.ReadUInt16();
            var b = _second.ReadUInt16();

            if (a != b)
            {
                throw new Exception(string.Format("a={0}, b={1}", a, b));
            }
            return(a);
        }
Пример #16
0
        public static EnableDebugger2Tag Create(SwfStreamReader reader)
        {
            reader.ReadUInt16();             // reserved
            var md5 = reader.IsEOF
                                ? string.Empty
                                : reader.ReadString();

            return(new EnableDebugger2Tag {
                MD5PasswordHash = md5
            });
        }
Пример #17
0
        public static DefineBinaryDataTag Create(SwfStreamReader reader)
        {
            var tag = reader.ReadUInt16();

            reader.ReadUInt32();             // reserved
            var data = reader.ReadRest();

            return(new DefineBinaryDataTag {
                Tag = tag,
                Data = data
            });
        }
Пример #18
0
        public static SwfTagBase Read(SwfStreamReader reader)
        {
            var type_and_size = reader.ReadUInt16();
            var tag_id        = type_and_size >> 6;
            var short_size    = type_and_size & 0x3f;
            var size          = short_size < 0x3f ? (uint)short_size : reader.ReadUInt32();
            var tag_data      = reader.ReadBytes(size);

            return(Create(new SwfTagData {
                TagId = tag_id,
                TagData = tag_data
            }));
        }
Пример #19
0
        public void ReadUInt16Test()
        {
            var mem = new MemoryStream();

            mem.WriteByte(0x12);
            mem.WriteByte(0xe7);
            mem.Seek(0, SeekOrigin.Begin);
            var reader = new SwfStreamReader(mem);

            Assert.AreEqual(0xe712, reader.ReadUInt16(), "Value");

            Assert.AreEqual(mem.Length, mem.Position, "Should reach end of the stream");
        }
        // ---------------------------------------------------------------------
        //
        // FillStyles
        //
        // ---------------------------------------------------------------------

        static List <FillStyle> ReadFillStyles(
            SwfStreamReader reader, bool allow_big_array, bool with_alpha)
        {
            ushort count = reader.ReadByte();

            if (allow_big_array && count == 255)
            {
                count = reader.ReadUInt16();
            }
            var styles = new List <FillStyle>(count);

            for (var i = 0; i < count; ++i)
            {
                styles.Add(ReadFillStyle(reader, with_alpha));
            }
            return(styles);
        }
        // ---------------------------------------------------------------------
        //
        // LineStyles
        //
        // ---------------------------------------------------------------------

        static void SkipLineStyles(
            SwfStreamReader reader, bool allow_big_array, bool with_alpha, bool line2_type)
        {
            ushort count = reader.ReadByte();

            if (allow_big_array && count == 255)
            {
                count = reader.ReadUInt16();
            }
            for (var i = 0; i < count; ++i)
            {
                if (line2_type)
                {
                    SkipLine2Style(reader);
                }
                else
                {
                    SkipLineStyle(reader, with_alpha);
                }
            }
        }
        // -----------------------------
        // FillStyle
        // -----------------------------

        static FillStyle ReadFillStyle(SwfStreamReader reader, bool with_alpha)
        {
            var fill_style = new FillStyle();

            fill_style.Type = SwfFillStyleType.Read(reader);
            if (fill_style.Type.IsSolidType)
            {
                SwfColor.Read(reader, with_alpha);
            }
            if (fill_style.Type.IsGradientType)
            {
                SwfMatrix.Read(reader, true);                 // GradientMatrix
                switch (fill_style.Type.Value)
                {
                case SwfFillStyleType.Type.LinearGradient:
                case SwfFillStyleType.Type.RadialGradient:
                    SkipGradient(reader, with_alpha);                     // Gradient
                    break;

                case SwfFillStyleType.Type.FocalGradient:
                    SkipFocalGradient(reader, with_alpha);                     // FocalGradient
                    break;
                }
            }
            if (fill_style.Type.IsBitmapType)
            {
                fill_style.BitmapId     = reader.ReadUInt16();
                fill_style.BitmapMatrix = SwfMatrix.Read(reader, true);
            }
            else
            {
                throw new System.Exception(
                          "Imported .swf file contains vector graphics. " +
                          "You should use Tools/FlashExport.jsfl script for prepare .fla file");
            }
            return(fill_style);
        }
Пример #23
0
        public void ReadUInt16Test()
        {
            var mem = new MemoryStream();
            mem.WriteByte(0x12);
            mem.WriteByte(0xe7);
            mem.Seek(0, SeekOrigin.Begin);
            var reader = new SwfStreamReader(mem);
            Assert.AreEqual(0xe712, reader.ReadUInt16(), "Value");

            Assert.AreEqual(mem.Length, mem.Position, "Should reach end of the stream");
        }
        // -----------------------------
        // LineStyles
        // -----------------------------

        static void SkipLineStyle(SwfStreamReader reader, bool with_alpha)
        {
            reader.ReadUInt16();             // Width
            SwfColor.Read(reader, with_alpha);
        }
Пример #25
0
 public static RemoveObject2Tag Create(SwfStreamReader reader)
 {
     return(new RemoveObject2Tag {
         Depth = reader.ReadUInt16()
     });
 }
Пример #26
0
        public static PlaceObject3Tag Create(SwfStreamReader reader)
        {
            var tag = new PlaceObject3Tag();

            tag.HasClipActions    = reader.ReadBit();
            tag.HasClipDepth      = reader.ReadBit();
            tag.HasName           = reader.ReadBit();
            tag.HasRatio          = reader.ReadBit();
            tag.HasColorTransform = reader.ReadBit();
            tag.HasMatrix         = reader.ReadBit();
            tag.HasCharacter      = reader.ReadBit();
            tag.Move = reader.ReadBit();
            reader.ReadBit();             // reserved
            tag.OpaqueBackground = reader.ReadBit();
            tag.HasVisible       = reader.ReadBit();
            tag.HasImage         = reader.ReadBit();
            tag.HasClassName     = reader.ReadBit();
            tag.HasCacheAsBitmap = reader.ReadBit();
            tag.HasBlendMode     = reader.ReadBit();
            tag.HasFilterList    = reader.ReadBit();
            tag.Depth            = reader.ReadUInt16();

            tag.ClassName = tag.HasClassName
                                ? reader.ReadString()
                                : string.Empty;

            tag.CharacterId = tag.HasCharacter
                                ? reader.ReadUInt16()
                                : (ushort)0;

            tag.Matrix = tag.HasMatrix
                                ? SwfMatrix.Read(reader)
                                : SwfMatrix.identity;

            tag.ColorTransform = tag.HasColorTransform
                                ? SwfColorTransform.Read(reader, true)
                                : SwfColorTransform.identity;

            tag.Ratio = tag.HasRatio
                                ? reader.ReadUInt16()
                                : (ushort)0;

            tag.Name = tag.HasName
                                ? reader.ReadString()
                                : string.Empty;

            tag.ClipDepth = tag.HasClipDepth
                                ? reader.ReadUInt16()
                                : (ushort)0;

            tag.SurfaceFilters = tag.HasFilterList
                                ? SwfSurfaceFilters.Read(reader)
                                : SwfSurfaceFilters.identity;

            tag.BlendMode = tag.HasBlendMode
                                ? SwfBlendMode.Read(reader)
                                : SwfBlendMode.identity;

            tag.BitmapCache = tag.HasCacheAsBitmap
                                ? (0 != reader.ReadByte())
                                : false;

            tag.Visible = tag.HasVisible && !reader.IsEOF
                                ? (0 != reader.ReadByte())
                                : true;

            tag.BackgroundColor = tag.HasVisible && !reader.IsEOF
                                ? SwfColor.Read(reader, true)
                                : SwfColor.identity;

            tag.ClipActions = tag.HasClipActions && !reader.IsEOF
                                ? SwfClipActions.Read(reader)
                                : SwfClipActions.identity;

            return(tag);
        }