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); }
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"); }
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 }); }
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); }
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); } } }
public override void AlignToByte() { _first.AlignToByte(); _second.AlignToByte(); }