static void SkipCurvedEdgeShapeRecord(SwfStreamReader reader)
        {
            var num_bits = reader.ReadUnsignedBits(4) + 2;

            reader.ReadSignedBits(num_bits);             // control_delta_x
            reader.ReadSignedBits(num_bits);             // control_delta_y
            reader.ReadSignedBits(num_bits);             // anchor_delta_x
            reader.ReadSignedBits(num_bits);             // anchor_delta_y
        }
Пример #2
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);
        }
        static void SkipStraigtEdgeShapeRecord(SwfStreamReader reader)
        {
            var num_bits          = reader.ReadUnsignedBits(4) + 2;
            var general_line_flag = reader.ReadBit();
            var vert_line_flag    = general_line_flag ? false : reader.ReadBit();

            if (general_line_flag || !vert_line_flag)
            {
                reader.ReadSignedBits(num_bits);                 // delta_x
            }
            if (general_line_flag || vert_line_flag)
            {
                reader.ReadSignedBits(num_bits);                 // delta_y
            }
        }
Пример #4
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
            });
        }
Пример #5
0
        public override int ReadSignedBits(uint count)
        {
            var a = _first.ReadSignedBits(count);
            var b = _second.ReadSignedBits(count);

            if (a != b)
            {
                throw new Exception(string.Format("a={0}, b={1}", a, b));
            }
            return(a);
        }
Пример #6
0
        public void WriteNegativeFixedPoint16FromBitsTest()
        {
            var mem    = new MemoryStream();
            var writer = new SwfStreamWriter(mem);
            var bits   = new SignedBitsCount(-81920).GetBits();

            writer.WriteFixedPoint16(-1.25, bits);
            writer.FlushBits();
            mem.Seek(0, SeekOrigin.Begin);
            var reader = new SwfStreamReader(mem);
            int actual = reader.ReadSignedBits(bits);

            Assert.AreEqual(-81920, actual);
        }
Пример #7
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);
        }
Пример #8
0
        public void ReadSignedBitsPositiveTest()
        {
            var mem = new MemoryStream();
            mem.WriteByte(0x2a);
            mem.WriteByte(0xc3);
            mem.Seek(0, SeekOrigin.Begin);
            var reader = new SwfStreamReader(mem);

            Assert.AreEqual(0x0ab, reader.ReadSignedBits(10), "Value");

            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");
        }
Пример #9
0
        public void ReadSignedBitsNegativeTest()
        {
            var mem = new MemoryStream();

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

            Assert.AreEqual(-0x155, reader.ReadSignedBits(10), "Value");

            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);
                }
            }
        }
Пример #11
0
 public void WriteNegativeFixedPoint16FromBitsTest()
 {
     var mem = new MemoryStream();
     var writer = new SwfStreamWriter(mem);
     var bits = new SignedBitsCount(-81920).GetBits();
     writer.WriteFixedPoint16(-1.25, bits);
     writer.FlushBits();
     mem.Seek(0, SeekOrigin.Begin);
     var reader = new SwfStreamReader(mem);
     int actual = reader.ReadSignedBits(bits);
     Assert.AreEqual(-81920, actual);
 }