我在画布上使用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;
如何判断它是增加还是减少?有遗产吗?
答案 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);