none
请问下如何在WPF的后台代码中实现图片的旋转 RRS feed

  • 问题

  • 正在设计一个仪表的控件,需要指针围绕着表盘的中心旋转,代码如下:

             protected override void OnRender(DrawingContext dc)
            {
                base.OnRender(dc);

                Rect rect = new Rect(71.5, 70,8, 57);
                Matrix matrix = new Matrix();
                matrix.RotateAt(30, 75.5, 72);
                rect.Transform(matrix);

                pointer.Rotation = Rotation.Rotate90;
                dc.DrawImage(pointer, rect);
     }

    但是图片并未旋转,而是变粗了,所以想请教一下如何让图片沿着控件中的一个中心点旋转。

       
    2012年4月8日 12:02

答案

  • 你仅仅是旋转了 Rect 这个边界区域,你没有旋转图像本身。 Rect旋转后她依然还是一个竖直的矩形,只是会变细或粗。

    所以你应该PushTransform到dc上才对:

        protected override void OnRender(DrawingContext dc)
        {
          base.OnRender(dc);
    
          Rect rect = new Rect(71.5, 70, 2, 57);
          Matrix matrix = new Matrix();
          matrix.RotateAt(30, 75.5, 72);
          //rect.Transform(matrix);
    
          pointer.Rotation = Rotation.Rotate90;
          dc.PushTransform(new MatrixTransform(matrix));
          dc.DrawImage(pointer, rect);
        }


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年4月12日 3:46
    版主

全部回复

  • 你仅仅是旋转了 Rect 这个边界区域,你没有旋转图像本身。 Rect旋转后她依然还是一个竖直的矩形,只是会变细或粗。

    所以你应该PushTransform到dc上才对:

        protected override void OnRender(DrawingContext dc)
        {
          base.OnRender(dc);
    
          Rect rect = new Rect(71.5, 70, 2, 57);
          Matrix matrix = new Matrix();
          matrix.RotateAt(30, 75.5, 72);
          //rect.Transform(matrix);
    
          pointer.Rotation = Rotation.Rotate90;
          dc.PushTransform(new MatrixTransform(matrix));
          dc.DrawImage(pointer, rect);
        }


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年4月12日 3:46
    版主
  • 谢谢 我试试哈
    2012年4月12日 4:42