public unsafe TransformedNearestNeighborContentRenderer(SizeInt32 size, ISurface <ColorBgra> content, Matrix3x2Double matrix) : base(size.Width, size.Height, true) { Validate.Begin().IsPositive(size.Width, "size.Width").IsPositive(size.Height, "size.Height").IsTrue(matrix.HasInverse, "matrix.HasInverse").Check(); this.content = content; this.contentWidth = this.content.Width; this.contentHeight = this.content.Height; this.contentScan0 = (ColorBgra *)this.content.Scan0; this.contentStride = this.content.Stride; this.matrix = matrix; this.invMatrix = this.matrix.Inverse; PointDouble pt = new PointDouble(0.5, 0.5); PointDouble num2 = new PointDouble(0.5, 1.5); PointDouble num3 = new PointDouble(1.5, 0.5); PointDouble num4 = this.invMatrix.Transform(pt); PointDouble num5 = this.invMatrix.Transform(num2); PointDouble num6 = this.invMatrix.Transform(num3); PointDouble num7 = new PointDouble(num4.X, num4.Y); PointDouble num8 = new PointDouble(num5.X, num5.Y); PointDouble num9 = new PointDouble(num6.X, num6.Y); double num10 = num9.X - num7.X; double num11 = num9.Y - num7.Y; double num12 = num8.X - num7.X; double num13 = num8.Y - num7.Y; this.srcOffsetOriginXFp = DoubleUtil.ClampToInt64(num7.X * 16777216.0); this.srcOffsetOriginYFp = DoubleUtil.ClampToInt64(num7.Y * 16777216.0); this.srcOffsetDxDxFp = DoubleUtil.ClampToInt64(num10 * 16777216.0); this.srcOffsetDyDxFp = DoubleUtil.ClampToInt64(num11 * 16777216.0); this.srcOffsetDxDyFp = DoubleUtil.ClampToInt64(num12 * 16777216.0); this.srcOffsetDyDyFp = DoubleUtil.ClampToInt64(num13 * 16777216.0); }