3

我正在画Grid这样的 dc (DrawingContext):

dc.DrawImage(_imageSource, new Rect(x, y, width, height);

但是,如果我想在绘图上下文中旋转我正在绘制的图像怎么办?

我知道我可以将效果推送到绘图上下文,但是,它会影响所有绘图,而我只想旋转_imageSource.

任何想法?

4

1 回答 1

5

您可以在绘制图像之前推送 RotateTransform,并在绘制后立即弹出变换。

var transform = new RotateTransform(...);
dc.PushTransform(transform);
dc.DrawImage(_imageSource, new Rect(x, y, width, height));
dc.Pop();

或者,您可以创建 ImageDrawing,将其添加到 DrawingGroup(具有Transform属性),然后绘制 DrawingGroup:

var drawingGroup = new DrawingGroup();
drawingGroup.Transform = new RotateTransform(...);
drawingGroup.Children.Add(new ImageDrawing(_imageSource, new Rect(x, y, width, height)));
dc.DrawDrawing(drawingGroup);

所有的 DrawingContext.Draw... 方法实际上创建和绘制适当的绘图对象。


除了在重写的 OnRender() 方法中不断重绘所有内容之外,您还可以执行以下操作:

  • 创建一个DrawingVisual作为绘图的容器。有关如何做到这一点,请参阅使用 DrawingVisual 对象。

  • 如上所示,使用 ImageDrawing 创建一个 DrawingGroup,并将 DrawingGroup一次绘制到DrawingVisual.RenderOpen提供的 DrawingContext 中。

  • 使用 MatrixTransform 或 TransformGroup 进行完整的图像转换,即平移和旋转。将 DrawingGroup.Transform 属性设置为此变换(而不是仅如上所示的 RotateTransform)。

  • 当图像的位置或旋转角度发生变化时,只需更改相关的变换即可。不需要重绘。

于 2012-12-09T09:21:28.707 回答