none
如何对visual进行MatRix变换? RRS feed

  • 问题

  •  DrawingVisual visual = new DrawingVisual();          
                using (DrawingContext dc = visual.RenderOpen())
                {

                    dc.DrawEllipse(null, mypen, myDrawpoint, 2, 2);
                    dc.Close();

                }

                // Matrix myMatrix = new Matrix(0, 1, 1, 0, 20, 2);
                //myRectangle.Transform(myMatrix);
              
                canvas1.AddVisual(visual);

    简单的代码如上:我想对这个visual进行变换,应该如何实现?

    2011年2月21日 6:09

答案

  • 你好,

    根据我的经验,你要找的是 Stroke.TransForm 方法,详情你可以参考这篇MSDN文档:

    http://msdn.microsoft.com/zh-cn/library/system.windows.ink.stroke.transform.aspx?queryresult=true

    里面有参考代码:

    protected DrawingVisual DrawDCOnly(Stroke myStroke)

            {

                // Create new Visual context to draw on

                DrawingVisual myVisual = new DrawingVisual();

                DrawingContext myContext = myVisual.RenderOpen();

     

                // myMatrix is scaled by:

                // myMatrix.Scale(0.5, 0.5)

                myStroke.Transform(myMatrix, false);

     

                // Draw the stroke on the Visual context using DrawingContext

                myStroke.Draw(myContext);

     

                // Close the context

                myContext.Close();

     

                return myVisual;

            }

     

    Best regards,


    Sheldon _Xiao [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.

    • 已标记为答案 大庆WPF 2011年2月21日 12:39
    2011年2月21日 12:29
    版主
  • 我以上的想法实现的过程,终于找到了一个简单的答案:

    写出来,供大家参考一下。

                visual.Transform = new RotateTransform();
                visual.Transform = new ScaleTransform();
                (visual.Transform as ScaleTransform).ScaleY = -1;

    我想要是做其他别的变换,应该用相同的方式就能够实现了!

    • 已标记为答案 大庆WPF 2011年2月22日 3:06
    2011年2月22日 3:05

全部回复

  • 你好,

    根据我的经验,你要找的是 Stroke.TransForm 方法,详情你可以参考这篇MSDN文档:

    http://msdn.microsoft.com/zh-cn/library/system.windows.ink.stroke.transform.aspx?queryresult=true

    里面有参考代码:

    protected DrawingVisual DrawDCOnly(Stroke myStroke)

            {

                // Create new Visual context to draw on

                DrawingVisual myVisual = new DrawingVisual();

                DrawingContext myContext = myVisual.RenderOpen();

     

                // myMatrix is scaled by:

                // myMatrix.Scale(0.5, 0.5)

                myStroke.Transform(myMatrix, false);

     

                // Draw the stroke on the Visual context using DrawingContext

                myStroke.Draw(myContext);

     

                // Close the context

                myContext.Close();

     

                return myVisual;

            }

     

    Best regards,


    Sheldon _Xiao [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.

    • 已标记为答案 大庆WPF 2011年2月21日 12:39
    2011年2月21日 12:29
    版主
  • 不好意思,能不能详细点写帮助啊。我仔细的看了一下,一些细节的地方还是搞不懂啊。郁闷。。

    Stroke myStroke 这个东西怎么实例化啊?

    2011年2月21日 13:48
  • 我以上的想法实现的过程,终于找到了一个简单的答案:

    写出来,供大家参考一下。

                visual.Transform = new RotateTransform();
                visual.Transform = new ScaleTransform();
                (visual.Transform as ScaleTransform).ScaleY = -1;

    我想要是做其他别的变换,应该用相同的方式就能够实现了!

    • 已标记为答案 大庆WPF 2011年2月22日 3:06
    2011年2月22日 3:05