MatrixTransform你如何判断它是增加还是减少

时间:2012-11-29 06:41:55

标签: c# wpf

我在画布上使用MatrixTransform,如下所示:

var transformation = MyCanvas.RenderTransform as MatrixTransform;
var matrix = transformation == null ? Matrix.Identity:transformation.Matrix;

matrix.ScaleAt(e.DeltaManipulation.Scale.X,
               e.DeltaManipulation.Scale.Y,
               e.ManipulationOrigin.X,
               e.ManipulationOrigin.Y);

Matrix m = MyCanvas.RenderTransform.Value;

如何判断它是增加还是减少?有遗产吗?

1 个答案:

答案 0 :(得分:3)

我不确定我是否帮助您,但如果您需要知道生成的矩阵是否具有小于1或大于1的缩放因子,您只需检查Matrix.M11和{{3属性。除非你也旋转,否则它们会在x和y方向上给出缩放因子。产生的总缩放量取决于您如何定义它。最简单的定义可能是算术平均值(M11 + M22)/ 2:

matrix.ScaleAt(e.DeltaManipulation.Scale.X,
               e.DeltaManipulation.Scale.Y,
               e.ManipulationOrigin.X,
               e.ManipulationOrigin.Y);

var effectiveScale = (matrix.M11 / matrix.M22) / 2;

编辑:阅读评论后我必须补充一点,只要您在x和y方向上独立缩放,您可能会放大一个,同时缩小另一个方向。为了避免这种情况并获得定义明确的均匀缩放因子,首先必须通过类似

的方法计算平均缩放系数
var scale = (e.DeltaManipulation.Scale.X +
             e.DeltaManipulation.Scale.Y) / 2;

此值大于1,用于放大,小于1用于缩小操作。然后你会像这样缩放矩阵:

matrix.ScaleAt(scale, scale,
               e.ManipulationOrigin.X, e.ManipulationOrigin.Y);