public static void WriteMatrix(this ISwfStreamWriter writer, ref SwfMatrix matrix) { var hasScale = matrix.HasScale; writer.WriteBit(hasScale); if (hasScale) { var sx = (int)(matrix.ScaleX * 65536.0); var sy = (int)(matrix.ScaleY * 65536.0); var scaleBits = new SignedBitsCount(sx, sy).GetBits(); if (scaleBits < 1) scaleBits = 1; writer.WriteUnsignedBits(scaleBits, 5); writer.WriteFixedPoint16(matrix.ScaleX, scaleBits); writer.WriteFixedPoint16(matrix.ScaleY, scaleBits); } var hasRotate = matrix.HasRotate; writer.WriteBit(hasRotate); if (hasRotate) { var rx = (int)(matrix.RotateSkew0 * 65536.0); var ry = (int)(matrix.RotateSkew1 * 65536.0); var rotateBits = new SignedBitsCount(rx, ry).GetBits(); if (rotateBits < 1) rotateBits = 1; writer.WriteUnsignedBits(rotateBits, 5); writer.WriteFixedPoint16(matrix.RotateSkew0, rotateBits); writer.WriteFixedPoint16(matrix.RotateSkew1, rotateBits); } var translateBits = new SignedBitsCount(matrix.TranslateX, matrix.TranslateY).GetBits(); writer.WriteUnsignedBits(translateBits, 5); writer.WriteSignedBits(matrix.TranslateX, translateBits); writer.WriteSignedBits(matrix.TranslateY, translateBits); writer.FlushBits(); }
/// <summary> /// Writes rectangle to the writer. /// </summary> /// <param name="writer">Writer to which to write rectangle.</param> /// <param name="rect">Rectangle to be written.</param> public static void WriteRect(this ISwfStreamWriter writer, ref SwfRect rect) { var btCount = new SignedBitsCount(rect.XMin, rect.XMax, rect.YMin, rect.YMax); var bits = btCount.GetBits(); if (bits < 1) bits = 1; writer.WriteUnsignedBits(bits, 5); writer.WriteSignedBits(rect.XMin, bits); writer.WriteSignedBits(rect.XMax, bits); writer.WriteSignedBits(rect.YMin, bits); writer.WriteSignedBits(rect.YMax, bits); writer.FlushBits(); }
public static void WriteColorTransformRGB(this ISwfStreamWriter writer, ref ColorTransformRGB tranform) { var bitsCounter = new SignedBitsCount(0); if (tranform.HasAddTerms) { bitsCounter.AddValue(tranform.RedAddTerm); bitsCounter.AddValue(tranform.GreenAddTerm); bitsCounter.AddValue(tranform.BlueAddTerm); } if (tranform.HasMultTerms) { bitsCounter.AddValue(tranform.RedMultTerm); bitsCounter.AddValue(tranform.GreenMultTerm); bitsCounter.AddValue(tranform.BlueMultTerm); } writer.WriteBit(tranform.HasAddTerms); writer.WriteBit(tranform.HasMultTerms); var bits = bitsCounter.GetBits(); writer.WriteUnsignedBits(bits, 4); if (tranform.HasMultTerms) { writer.WriteSignedBits(tranform.RedMultTerm, bits); writer.WriteSignedBits(tranform.GreenMultTerm, bits); writer.WriteSignedBits(tranform.BlueMultTerm, bits); } if (tranform.HasAddTerms) { writer.WriteSignedBits(tranform.RedAddTerm, bits); writer.WriteSignedBits(tranform.GreenAddTerm, bits); writer.WriteSignedBits(tranform.BlueAddTerm, bits); } writer.FlushBits(); }
public void ReadFixedPoint16FromBitsTest() { var mem = new MemoryStream(); var writer = new SwfStreamWriter(mem); const int val = 0x03aa4523; const ushort hi = val >> 16; const ushort low = val & 0xffff; const double expected = hi + low / 65536.0; var bits = new SignedBitsCount(hi).GetBits(); writer.WriteUnsignedBits(hi, bits); writer.WriteUnsignedBits(low, 16); writer.FlushBits(); mem.Seek(0, SeekOrigin.Begin); var reader = new SwfStreamReader(mem); double actual = reader.ReadFixedPoint16(bits + 16); Assert.AreEqual(expected, actual); }
public void ReadNegativeFixedPoint16FromBitsTest() { var mem = new MemoryStream(); var writer = new SwfStreamWriter(mem); const int val = -81920; var bits = new SignedBitsCount(val).GetBits(); writer.WriteSignedBits(val, bits); writer.FlushBits(); mem.Seek(0, SeekOrigin.Begin); var reader = new SwfStreamReader(mem); double actual = reader.ReadFixedPoint16(bits); Assert.AreEqual(-1.25, actual); }
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); }