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(); }
SwfTagData ISwfTagVisitor <ISwfStreamWriter, SwfTagData> .Visit(DefineText2Tag tag, ISwfStreamWriter writer) { writer.WriteUInt16(tag.CharacterID); writer.WriteRect(tag.TextBounds); writer.WriteMatrix(ref tag.TextMatrix); var glyphBitsCounter = new UnsignedBitsCount(0); var advanceBitsCounter = new SignedBitsCount(0); foreach (var textRecord in tag.TextRecords) { foreach (var glyph in textRecord.Glyphs) { glyphBitsCounter.AddValue(glyph.GlyphIndex); advanceBitsCounter.AddValue(glyph.GlyphAdvance); } } var glyphBits = glyphBitsCounter.GetBits(); var advanceBits = advanceBitsCounter.GetBits(); writer.WriteByte((byte)glyphBits); writer.WriteByte((byte)advanceBits); foreach (var textRecord in tag.TextRecords) { writer.WriteTextRecordRGBA(textRecord, glyphBits, advanceBits); writer.FlushBits(); } writer.FlushBits(); return(null); }
private static void WriteStyleChangeShapeRecord(ISwfStreamWriter writer, StyleChangeShapeRecord record, ref uint fillStylesBits, ref uint lineStylesBits) { writer.WriteBit(false); var stateNewStyles = record.StateNewStyles; var stateFillStyle0 = record.FillStyle0.HasValue; var stateFillStyle1 = record.FillStyle1.HasValue; var stateLineStyle = record.LineStyle.HasValue; var stateMoveTo = record.StateMoveTo; writer.WriteBit(stateNewStyles); writer.WriteBit(stateLineStyle); writer.WriteBit(stateFillStyle1); writer.WriteBit(stateFillStyle0); writer.WriteBit(stateMoveTo); if (stateMoveTo) { var cnt = new SignedBitsCount(record.MoveDeltaX, record.MoveDeltaY); var moveBits = cnt.GetBits(); writer.WriteUnsignedBits(moveBits, 5); writer.WriteSignedBits(record.MoveDeltaX, moveBits); writer.WriteSignedBits(record.MoveDeltaY, moveBits); } if (stateFillStyle0) { writer.WriteUnsignedBits(record.FillStyle0.Value, fillStylesBits); } if (stateFillStyle1) { writer.WriteUnsignedBits(record.FillStyle1.Value, fillStylesBits); } if (stateLineStyle) { writer.WriteUnsignedBits(record.LineStyle.Value, lineStylesBits); } }
ShapeRecordWriteContext IShapeRecordVisitor <ShapeRecordWriteContext, ShapeRecordWriteContext> .Visit(StraightEdgeShapeRecord record, ShapeRecordWriteContext ctx) { var writer = ctx.Writer; writer.WriteBit(true); writer.WriteBit(true); var actualBits = new SignedBitsCount(record.DeltaX, record.DeltaY).GetBits(); if (actualBits < 2) { actualBits = 2; } writer.WriteUnsignedBits(actualBits - 2u, 4); bool genLineFlags = record.DeltaX != 0 && record.DeltaY != 0; writer.WriteBit(genLineFlags); bool vertFlag = record.DeltaX == 0; if (!genLineFlags) { writer.WriteBit(vertFlag); } if (genLineFlags || !vertFlag) { writer.WriteSignedBits(record.DeltaX, actualBits); } if (genLineFlags || vertFlag) { writer.WriteSignedBits(record.DeltaY, actualBits); } return(ctx); }
public void GetBitsPositiveTest() { var bits = new SignedBitsCount(0); bits.AddValue(127); bits.AddValue(260); bits.AddValue(15); bits.AddValue(514); Assert.AreEqual(11, bits.GetBits()); }
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); }
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); }
/// <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 void WriteFixedPoint16FromBitsTest() { 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() + 16; writer.WriteFixedPoint16(expected, bits); writer.FlushBits(); mem.Seek(0, SeekOrigin.Begin); var reader = new SwfStreamReader(mem); double actual = reader.ReadFixedPoint16(bits); Assert.AreEqual(expected, actual); }
ShapeRecordWriteContext IShapeRecordVisitor <ShapeRecordWriteContext, ShapeRecordWriteContext> .Visit(CurvedEdgeShapeRecord record, ShapeRecordWriteContext ctx) { var writer = ctx.Writer; writer.WriteBit(true); writer.WriteBit(false); var actualBits = new SignedBitsCount(record.ControlDeltaX, record.ControlDeltaY, record.AnchorDeltaX, record.AnchorDeltaY).GetBits(); if (actualBits < 2) { actualBits = 2; } writer.WriteUnsignedBits(actualBits - 2u, 4); writer.WriteSignedBits(record.ControlDeltaX, actualBits); writer.WriteSignedBits(record.ControlDeltaY, actualBits); writer.WriteSignedBits(record.AnchorDeltaX, actualBits); writer.WriteSignedBits(record.AnchorDeltaY, actualBits); return(ctx); }
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(); }
public void GetBitsNegativeTwoTest() { var bits = new SignedBitsCount(-2); Assert.AreEqual(2, bits.GetBits()); }
public void GetBitsNegativeOneTest() { var bits = new SignedBitsCount(-1); Assert.AreEqual(1, bits.GetBits()); }
public void GetBitsPositiveOneTest() { var bits = new SignedBitsCount(1); Assert.AreEqual(2, bits.GetBits()); }
public void GetBitsZeroTest() { var bits = new SignedBitsCount(0); Assert.AreEqual(1, bits.GetBits()); }