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 static void AreEqual(SwfMatrix expected, SwfMatrix actual, string message) { Assert.AreEqual(expected.HasScale, actual.HasScale, message + ": HasScale"); Assert.AreEqual(expected.HasRotate, actual.HasRotate, message + ": HasRotate"); Assert.AreEqual(expected.ScaleX, actual.ScaleX, message + ": ScaleX"); Assert.AreEqual(expected.ScaleY, actual.ScaleY, message + ": ScaleY"); Assert.AreEqual(expected.RotateSkew0, actual.RotateSkew0, message + ": RotateSkew0"); Assert.AreEqual(expected.RotateSkew1, actual.RotateSkew1, message + ": RotateSkew1"); Assert.AreEqual(expected.TranslateX, actual.TranslateX, message + ": TranslateX"); Assert.AreEqual(expected.TranslateY, actual.TranslateY, message + ": TranslateY"); }
public static XElement ToXml(SwfMatrix matrix) { var res = new XElement(TAG_NAME, new XAttribute("transX", matrix.TranslateX), new XAttribute("transY", matrix.TranslateY)); if (matrix.HasScale) { res.Add(new XAttribute("scaleX", matrix.ScaleX)); res.Add(new XAttribute("scaleY", matrix.ScaleY)); } if (matrix.HasRotate) { res.Add(new XAttribute("skewX", matrix.RotateSkew0)); res.Add(new XAttribute("skewY", matrix.RotateSkew1)); } return res; }
public void WriteMatrixFromBitsTest() { var mem = new MemoryStream(); var matrix = new SwfMatrix { ScaleX = 2.5, ScaleY = 1.75, RotateSkew0 = 3.25, RotateSkew1 = 0.5, TranslateX = 16, TranslateY = 24 }; var writer = new SwfStreamWriter(mem); writer.WriteMatrix(ref matrix); CheckBits(mem, "1", "10011", "010.10000000.00000000", "001.11000000.00000000", "1", "10011", "011.01000000.00000000", "000.10000000.00000000", "00110", "010000", "011000"); }
public static SwfMatrix FromXml(XElement xMatrix) { var xMoveX = xMatrix.RequiredIntAttribute("transX"); var xMoveY = xMatrix.RequiredIntAttribute("transY"); var xScaleX = xMatrix.Attribute("scaleX"); var xScaleY = xMatrix.Attribute("scaleY"); var xSkewX = xMatrix.Attribute("skewX"); var xSkewY = xMatrix.Attribute("skewY"); var matrix = new SwfMatrix { TranslateX = xMoveX, TranslateY = xMoveY, ScaleX = xScaleX != null ? CommonFormatter.ParseDouble(xScaleX.Value) : 1, ScaleY = xScaleY != null ? CommonFormatter.ParseDouble(xScaleY.Value) : 1, RotateSkew0 = xSkewX != null ? CommonFormatter.ParseDouble(xSkewX.Value) : 0, RotateSkew1 = xSkewY != null ? CommonFormatter.ParseDouble(xSkewY.Value) : 0, }; return matrix; }
private static void AddMatrix(XElement xml, SwfMatrix matrix) { xml.Add(new XElement("matrix", XMatrix.ToXml(matrix))); }
public static void WriteMatrix(this ISwfStreamWriter writer, SwfMatrix matrix) { writer.WriteMatrix(ref matrix); }