C# 旋转图像源?
我在dc(DrawingContext)绘制一个C# 旋转图像源?,c#,wpf,image,grid,image-rotation,C#,Wpf,Image,Grid,Image Rotation,我在dc(DrawingContext)绘制一个网格,如下所示: dc.DrawImage(_imageSource, new Rect(x, y, width, height); 但是,如果我想在绘图上下文中旋转正在绘制的图像,该怎么办 我知道我可以将效果推送到绘图上下文,但它会影响所有绘图,而我只想旋转\u imageSource的绘图 有什么想法吗?您可以在绘制图像之前推动旋转变换,然后在绘制后立即弹出变换 var transform = new RotateTransform(...)
网格
,如下所示:
dc.DrawImage(_imageSource, new Rect(x, y, width, height);
但是,如果我想在绘图上下文中旋转正在绘制的图像,该怎么办
我知道我可以将效果推送到绘图上下文,但它会影响所有绘图,而我只想旋转\u imageSource
的绘图
有什么想法吗?您可以在绘制图像之前推动旋转变换,然后在绘制后立即弹出变换
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()方法中不断重画所有内容:
- 创建一个容器作为图形的容器。看看怎么做
- 使用如上所示的ImageDrawing创建DrawingGroup,并将DrawingGroup绘制到由提供的DrawingContext中
- 使用矩阵变换或变换组进行完整的图像变换,即平移和旋转。将DrawingGroup.Transform属性设置为此转换(而不是仅如上所示的RotateTransform)
- 当图像的位置或旋转角度更改时,仅更改相关变换。不需要重新绘制