积极答复者
请问下如何在WPF的后台代码中实现图片的旋转

问题
-
正在设计一个仪表的控件,需要指针围绕着表盘的中心旋转,代码如下:
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);
}但是图片并未旋转,而是变粗了,所以想请教一下如何让图片沿着控件中的一个中心点旋转。
答案
-
你仅仅是旋转了 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
- 已标记为答案 small zombies 2012年4月12日 4:45
全部回复
-
你仅仅是旋转了 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
- 已标记为答案 small zombies 2012年4月12日 4:45