Пример #1
0
        public static SwfColorTransform Read(SwfStreamReader reader, bool with_alpha)
        {
            var transform = SwfColorTransform.identity;

            transform.HasAdd = reader.ReadBit();
            transform.HasMul = reader.ReadBit();
            var bits = reader.ReadUnsignedBits(4);

            if (transform.HasMul)
            {
                transform.RMul = (short)reader.ReadSignedBits(bits);
                transform.GMul = (short)reader.ReadSignedBits(bits);
                transform.BMul = (short)reader.ReadSignedBits(bits);
                transform.AMul = with_alpha ? (short)reader.ReadSignedBits(bits) : byte.MaxValue;
            }
            if (transform.HasAdd)
            {
                transform.RAdd = (short)reader.ReadSignedBits(bits);
                transform.GAdd = (short)reader.ReadSignedBits(bits);
                transform.BAdd = (short)reader.ReadSignedBits(bits);
                transform.AAdd = with_alpha ? (short)reader.ReadSignedBits(bits) : (short)0;
            }
            reader.AlignToByte();
            return(transform);
        }
Пример #2
0
        public void AlignToByteTest()
        {
            var mem = new MemoryStream();

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

            Assert.AreEqual(true, reader.ReadBit(), "Bit 0");
            Assert.AreEqual(false, reader.ReadBit(), "Bit 1");
            Assert.AreEqual(true, reader.ReadBit(), "Bit 2");
            reader.AlignToByte();

            Assert.AreEqual(true, reader.ReadBit(), "Bit 8");
            Assert.AreEqual(true, reader.ReadBit(), "Bit 9");
            Assert.AreEqual(false, reader.ReadBit(), "Bit 10");
            Assert.AreEqual(false, reader.ReadBit(), "Bit 11");
            Assert.AreEqual(false, reader.ReadBit(), "Bit 12");
            Assert.AreEqual(false, reader.ReadBit(), "Bit 13");
            Assert.AreEqual(true, reader.ReadBit(), "Bit 14");
            Assert.AreEqual(true, reader.ReadBit(), "Bit 15");

            Assert.AreEqual(mem.Length, mem.Position, "Should reach end of the stream");
        }
Пример #3
0
        public static SwfRect Read(SwfStreamReader reader)
        {
            var bits = reader.ReadUnsignedBits(5);
            var xmin = reader.ReadSignedBits(bits) / 20.0f;
            var xmax = reader.ReadSignedBits(bits) / 20.0f;
            var ymin = reader.ReadSignedBits(bits) / 20.0f;
            var ymax = reader.ReadSignedBits(bits) / 20.0f;

            reader.AlignToByte();
            return(new SwfRect {
                XMin = xmin,
                XMax = xmax,
                YMin = ymin,
                YMax = ymax
            });
        }
Пример #4
0
        public static SwfMatrix Read(SwfStreamReader reader, bool fill_style)
        {
            var matrix    = SwfMatrix.identity;
            var has_scale = reader.ReadBit();

            if (has_scale)
            {
                var bits = (byte)reader.ReadUnsignedBits(5);
                matrix.ScaleX = reader.ReadFixedPoint16(bits);
                matrix.ScaleY = reader.ReadFixedPoint16(bits);
            }
            else
            {
                matrix.ScaleX     =
                    matrix.ScaleY = 1.0f;
            }
            var has_rotate = reader.ReadBit();

            if (has_rotate)
            {
                var bits = (byte)reader.ReadUnsignedBits(5);
                matrix.RotateSkew0 = reader.ReadFixedPoint16(bits);
                matrix.RotateSkew1 = reader.ReadFixedPoint16(bits);
            }
            else
            {
                matrix.RotateSkew0     =
                    matrix.RotateSkew1 = 0.0f;
            }
            var translate_bits = (byte)reader.ReadUnsignedBits(5);

            matrix.TranslateX = reader.ReadSignedBits(translate_bits) / 20.0f;
            matrix.TranslateY = reader.ReadSignedBits(translate_bits) / 20.0f;
            reader.AlignToByte();
            return(matrix);
        }
Пример #5
0
        public void AlignToByteTest()
        {
            var mem = new MemoryStream();
            mem.WriteByte(0xaa);
            mem.WriteByte(0xc3);
            mem.Seek(0, SeekOrigin.Begin);
            var reader = new SwfStreamReader(mem);

            Assert.AreEqual(true, reader.ReadBit(), "Bit 0");
            Assert.AreEqual(false, reader.ReadBit(), "Bit 1");
            Assert.AreEqual(true, reader.ReadBit(), "Bit 2");
            reader.AlignToByte();

            Assert.AreEqual(true, reader.ReadBit(), "Bit 8");
            Assert.AreEqual(true, reader.ReadBit(), "Bit 9");
            Assert.AreEqual(false, reader.ReadBit(), "Bit 10");
            Assert.AreEqual(false, reader.ReadBit(), "Bit 11");
            Assert.AreEqual(false, reader.ReadBit(), "Bit 12");
            Assert.AreEqual(false, reader.ReadBit(), "Bit 13");
            Assert.AreEqual(true, reader.ReadBit(), "Bit 14");
            Assert.AreEqual(true, reader.ReadBit(), "Bit 15");

            Assert.AreEqual(mem.Length, mem.Position, "Should reach end of the stream");
        }
        static bool ReadShapeRecord(
            SwfStreamReader reader, List <FillStyle> fill_styles,
            ref uint fill_style_bits, ref uint line_style_bits,
            bool allow_big_array, bool with_alpha, bool line2_type)
        {
            var is_edge = reader.ReadBit();

            if (is_edge)
            {
                var straight = reader.ReadBit();
                if (straight)
                {
                    SkipStraigtEdgeShapeRecord(reader);
                }
                else
                {
                    SkipCurvedEdgeShapeRecord(reader);
                }
                return(false);
            }
            else
            {
                var state_new_styles    = reader.ReadBit();
                var state_line_style    = reader.ReadBit();
                var state_fill_style1   = reader.ReadBit();
                var state_fill_style0   = reader.ReadBit();
                var state_move_to       = reader.ReadBit();
                var is_end_shape_record =
                    !state_new_styles && !state_line_style &&
                    !state_fill_style0 && !state_fill_style1 && !state_move_to;
                if (is_end_shape_record)
                {
                    return(true);
                }
                else
                {
                    if (state_move_to)
                    {
                        var move_bits = reader.ReadUnsignedBits(5);
                        reader.ReadSignedBits(move_bits);                         // move_delta_x
                        reader.ReadSignedBits(move_bits);                         // move_delta_y
                    }
                    if (state_fill_style0)
                    {
                        reader.ReadUnsignedBits(fill_style_bits);                         // fill_style_0
                    }
                    if (state_fill_style1)
                    {
                        reader.ReadUnsignedBits(fill_style_bits);                         // fill_style_1
                    }
                    if (state_line_style)
                    {
                        reader.ReadUnsignedBits(line_style_bits);                         // line_style
                    }
                    if (state_new_styles)
                    {
                        reader.AlignToByte();
                        fill_styles.AddRange(ReadFillStyles(reader, allow_big_array, with_alpha));
                        SkipLineStyles(reader, allow_big_array, with_alpha, line2_type);
                        fill_style_bits = reader.ReadUnsignedBits(4);
                        line_style_bits = reader.ReadUnsignedBits(4);
                    }
                    return(false);
                }
            }
        }
Пример #7
0
 public override void AlignToByte()
 {
     _first.AlignToByte();
     _second.AlignToByte();
 }