none
如何缩放InkCanvas里的元素 RRS feed

  • 问题

  • 我想缩放 InkCanvas 里的 strokeCollection...  strokecollection都是动态画上去的. 我尝试缩放InkCanvas会把画布的尺寸缩小虽然也达到了能缩放 StrokeCollection的效果但这不是我想要的..

    用 ScaleTransform 缩放的.

    2011年10月12日 1:13

答案

  • WPF中所有的变换都是可以用Matrix变换完成的,而Stroke支持Matrix变换。

    所以我们可以很简单的事先缩放变换:

         Stroke s= inkcanvas.Strokes[i] as Stroke;
         s.Transform(new Matrix(2,0,0,2,0,0),false);

    上面代码就是将笔迹所有点的 (x,y) 变成 (2*x,2*y)

    参考:http://blog.csdn.net/artlife/article/details/1477360

    如果你要按照笔迹中心缩放,参考下面的代码:

          Stroke s = inkcanvas.Strokes[0] as Stroke;
          Rect bound = s.GetBounds();
          double M11 = 2, M22 = 2; // Scale
          double centerX = bound.Width / 2 + bound.Left, centerY = bound.Height / 2 + bound.Top; // Center position
          double offsetX = centerX - (centerX * M11);
          double offsetY = centerY - (centerY * M22);
          s.Transform(new Matrix(M11, 0, 0, M22, offsetX, offsetY), false);
    

    Sincerely,


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • 已标记为答案 MakubeXSoft 2011年10月13日 0:54
    2011年10月12日 5:44
    版主

全部回复

  • WPF中所有的变换都是可以用Matrix变换完成的,而Stroke支持Matrix变换。

    所以我们可以很简单的事先缩放变换:

         Stroke s= inkcanvas.Strokes[i] as Stroke;
         s.Transform(new Matrix(2,0,0,2,0,0),false);

    上面代码就是将笔迹所有点的 (x,y) 变成 (2*x,2*y)

    参考:http://blog.csdn.net/artlife/article/details/1477360

    如果你要按照笔迹中心缩放,参考下面的代码:

          Stroke s = inkcanvas.Strokes[0] as Stroke;
          Rect bound = s.GetBounds();
          double M11 = 2, M22 = 2; // Scale
          double centerX = bound.Width / 2 + bound.Left, centerY = bound.Height / 2 + bound.Top; // Center position
          double offsetX = centerX - (centerX * M11);
          double offsetY = centerY - (centerY * M22);
          s.Transform(new Matrix(M11, 0, 0, M22, offsetX, offsetY), false);
    

    Sincerely,


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • 已标记为答案 MakubeXSoft 2011年10月13日 0:54
    2011年10月12日 5:44
    版主
  • 非常感谢

    2011年10月13日 0:54