c# - 如何旋转 ImageDrawing?
问题描述
我正在尝试绘制由多个其他图像组成的图像。其中一些图像需要旋转。我正在使用 ImageDrawing 和 DrawingGroup
我找到了 RotateTransform 类,但它不能应用于 ImageDrawing,只能应用于 DrawingGroup。
private void RedrawAquarium(object sender, EventArgs args)
{
aquarium.Iterate();
DrawingGroup aquariumImages = new DrawingGroup();
ImageDrawing background = new ImageDrawing();
background.Rect = new Rect(aquarium.Size);
background.ImageSource = new BitmapImage(aquarium.BackgroundImageUri);
aquariumImages.Children.Add(background);
foreach (var fish in aquarium.Fishes)
{
ImageDrawing fishImage = new ImageDrawing();
fishImage.Rect = new Rect(fish.Value.Position, fish.Value.Size);
fishImage.ImageSource = new BitmapImage(fish.Value.TextureUri);
aquariumImages.Children.Add(fishImage);
}
DrawingImage drawingImageSource = new DrawingImage(aquariumImages);
drawingImageSource.Freeze();
BackgroundImage.Source = drawingImageSource;
}
我应该使用一些东西而不是 ImageDrawing 类吗?
解决方案
如果您只需要简单的旋转,这应该可以:
var bitmap = new BitmapImage(fish.Value.TextureUri);
bitmap.Rotation = Rotation.Rotate90;
对于更复杂的旋转,下面的答案应该足够了:
aquariumImages.Children.Add(new DrawingGroup() { Children = { fishImage }, Transform = new RotateTransform(45)});
(matoouse答案的实现)
我已经确认这确实有效: VS screen example
推荐阅读
- typescript - 为什么从 TypeScript 方法装饰器返回 null 会阻止其他装饰器执行?
- python - 日期时间时区转换添加分钟而不是小时偏移
- swift - 集合视图单元格中的 IndexRow 变量在 reloadData() 后不会更改
- c# - 如何在 linux(ubuntu) 中使用 vscode 调试 asp.net core 3.1
- r - 如何在 R 中绑定子列表
- xamarin.forms - Xamarin 表单:显示警报在 UWP 平台上的 XF 版本 4.6 中不起作用
- node.js - 如何将数据从反应服务器发布到快递服务器?
- xamarin - 如何直接在 XAML 中将 ResourceDictionary 的值与 IValueConverter 绑定?
- java - 如何使用 Intelij 远程调试 EAR?
- java - JavaFX TabPane Tab 从外部控制器中选择