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);
        }